IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 顺序表涉及移动元素的算法杂谈(C语言实现) -> 正文阅读

[C++知识库]顺序表涉及移动元素的算法杂谈(C语言实现)

第一种算法
借助辅助数组

void move_elem(int a[],int n, int p)
{
	int *b = (int *)malloc(sizeof(int)*p);//定义辅助数组b[]
	for (int i = 0; i < n; i++)
	{
		if (i < p)
			b[i] = a[i];
		else
			a[i - p] = a[i];
	}
	for (int i = n-p,j=0; i < n; i++,j++)
	{
		a[i] = b[j];
	}
}

时间复杂度O(n),空间复杂度O( p)
第二种算法
使用翻转数组思想

void Reverse(int a[],int left,int right)
{
	int temp;
	for (int i = 0; i < (right - left + 1) / 2; i++)
	{
		temp = a[left + i];
		a[left + i] = a[right - i];
		a[right - i] = temp;
	}
}
void Converse(int a[], int n, int p)
{
	Reverse(a, 0, p - 1);
	Reverse(a, p, n - 1);
	Reverse(a, 0, n - 1);
}

时间复杂度O(n),空间复杂度O(1)

第三种算法
类似循环队列的思想

void move_elem(Seqlist *L,int p)
{
	int k = 0, i = 0, j, temp1, temp2;
	while(k!=L->len)
	{
		temp1 = L->data[i];
		j = i;
		do {
			j = (j + (L ->len) - p) % L->len;
			temp2 = L->data[j];
			L->data[j] = temp1;
			temp1 = temp2;
			k++;
		} while (j != i);
		i++;
	}
}

时间复杂度O(n),空间复杂度O(1)
第三种算法的测试代码

#include<stdio.h>
#define M 50
typedef struct {
	int  data[M];
	int len;
}Seqlist;
void Initlist(Seqlist *L,int n);
void move_elem(Seqlist *L, int p);
void Printlist(Seqlist *L);
void copylist(Seqlist *L, Seqlist *L2);
int main()
{
	Seqlist list1,list2;
	Seqlist *L=&list1;
	Seqlist *L2 = &list2;
	int n, m;//n是数组长度,m是移动位数
	for (n = 5; n <= 15; n++) {
		printf("初始长度为%d序列:\n",n);
		Initlist(L, n);
		Printlist(L);
		printf("--------------------------------------------------\n");
		for (m = 1; m <=n; m++) {
			copylist(L, L2);
			printf("向左移动%d位后的数列:\n",m);
			move_elem(L2, m);
			Printlist(L2);
			printf("---------------\n");
		}
	}
}
void move_elem(Seqlist *L,int p)
{
	int k = 0, i = 0, j, temp1, temp2;
	while(k!=L->len)
	{
		temp1 = L->data[i];
		j = i;
		do {
			j = (j + (L ->len) - p) % L->len;
			temp2 = L->data[j];
			L->data[j] = temp1;
			temp1 = temp2;
			k++;
		} while (j != i);
		i++;
	}
}
void Initlist(Seqlist *L,int n)
{
	for (int i = 0; i < n; i++)
	{
		L->data[i] = i+1;
	}
	L->len = n;
}
void Printlist(Seqlist *L)
{
	for (int i = 0; i < L->len; i++)
	{
		printf("%d ", L->data[i]);
	}
	printf("\n");
}
void copylist(Seqlist *L, Seqlist *L2) 
{
	for (int i = 0; i < L->len; i++)
	{
		L2->data[i] = L->data[i];
	}
	L2->len = L->len;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-15 15:59:28  更:2021-07-15 16:00:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/25 9:55:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码