数据结构代码综合题 线性表 19-10

思路:

循环左移p个位置 使用逆序方法:原序列 1 2 3 4 5 6 当p=2时 左移两位   3 4 5 6 1 2  

相当于先逆序前两位 2 1 3 4 5 6 再逆序后四位 2 1 6 5 4 3  再全部逆序 3 4 5 6 1 2

即使用三次逆序达到左移效果。

关键:

逆序方法:数组下标  0  5 交换  1 4交换  2 3交换 

                实际上就是 i 和 n-1-i 交换  (n为元素总数) 

          eg:从from 到to逆序 : 从0到5逆序:(from=0 to=5)

                即:i  和  (from+to)-i  交换

#include<bits/stdc++.h>
using namespace std;
int r[6]={1,2,3,4,5,6};
int i=0;
int n = sizeof(r) / sizeof(r[0]);
void reverse(int r[],int from,int to){
	for(i=from;i<=(to+from)/2;i++){
		int temp=r[i];
		r[i]=r[(to+from)-i];
		r[(to+from)-i]=temp;
	}
}
void print(int r[]){
	for(int i=0;i<n;i++) cout<<r[i]<<" ";
	cout<<endl;
}
void conrever(int r[],int p){
	reverse(r,0,n-1);
	print(r);
	reverse(r,0,n-p-1);
	print(r);
	reverse(r,n-p,n-1);
	print(r);
}
int main(){
	cout<<n<<endl; 
	conrever(r,2);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值