题目描述
设有长度为n(n>1)的顺序表R,将R中保存的序列循环左移P(0 < P < n)个位置,即将R中的数据由(x0,x1,...,xn-1)变换为(xp,xp+1,...,xn-1,x0,x1,...,xp-1)。如果p值不合法,输出"error!"。
输入
第一行为数据元素个数n; 第二行为n个整数; 第三行为要左移的位数p
输出
移动后的序列。
样例输入
10 1 2 3 4 5 6 7 8 9 10 5样例输出
6 7 8 9 10 1 2 3 4 5#include<iostream> #include<malloc.h> #include<cstring> using namespace std; #define INF 0x3f3f3f3f #define M 1000 typedef struct { int data[M]; int length; }sqlist; void initlist(sqlist*&L) { L=(sqlist*)malloc(sizeof(sqlist)); L->length=0; } void createlist(sqlist*&L,int n) { for(int i=0;i<n;i++) { cin>>L->data[i]; } L->length=n; } void sortlist(sqlist*&L1,sqlist*&L2,int m) { for(int i=0;i<L1->length;i++) { if(i-m<0) { L2->data[i-m+L1->length]=L1->data[i]; } else { L2->data[i-m]=L1->data[i]; } } L2->length=L1->length; } void outlist(sqlist*L2) { for(int i=0;i<L2->length;i++) { cout<<L2->data[i]<<" "; } } int main() { sqlist*L1,*L2; initlist(L1); initlist(L2); int n; cin>>n; createlist(L1,n); int m; cin>>m; if(m<0||m>n) { cout<<"error!"; } else { sortlist(L1,L2,m); outlist(L2); } return 0; }
09-17
1589