数据结构-顺序表-将一维数组R向左移P个位置

一.算法思想

思路一:例如数组[1,2,3,4,5],想左移动3个位置,移动之后的数组变为[4,5,1,2,3]。这时,如果我们用a代表1,2,3,用b代表4,5。那么就可以看成数组[a,b]变为了数组[b,a]。那么问题就变成了:如何将[a,b]变为[b,a]呢?
答案就是:首先将a逆置,变为[a逆置,b],然后再将b逆置,变为[a逆置,b逆置],最后将整个数组逆置就变为了[b,a] (这里可能需要用到一些线性代数的知识)

思路二:借助辅助数组temp,将数组R中前P个元素放入temp中,随后将后面的元素左移,最后再将temp中的P个元素放回到R数组中

二.源代码

解1:
void Reverse(List list,int start,int end){
    int temp = 0; //辅助变量
	for(int i =start,int j = end; i<j; i++,j--){ //逆置
		temp = list.Data[i];
		list.Data[i] = list.Data[j];
		list.Data[j] = temp;
	}
}
//算法主函数
void Converse(List list,int start,int end){
	Reverse(List list,int start,int p-1);
	Reverse(List list,int p,int end);
	Reverse(List list,int start,int end);
}

解2:
void Reverse_P(List list,int p){
	int index; 
	ElementType temp[MAXSIZE]; //辅助数组 
	for (int i = 0; i < p; i++) //将前P个元素放入辅助数组中
		temp[i] = list->Data[i];
		/*后面n-p个元素往前移动*/	
	for (int j = p, index = 0 ; index < p&&j<=list->Last; index++,j++ ) {
		list->Data[index] = list->Data[j];
	}
	//将放入辅助数组的前P个元素重新放回到原数组中
	for (int i = 0, int j = index; j <= list->Last;i++,j++) {
		list->Data[j] = temp[i];
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xulidanga

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值