题目描述
设有长度为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<stdio.h>
#include<stdlib.h>
#define Maxsize 50
typedef struct sqlist
{
int data[Maxsize];
int rear;
}Sqlist;
void Init(Sqlist *&L)
{
L = (Sqlist *) malloc (sizeof(Sqlist));
L->rear = 0;
}
void Creat(Sqlist *&L, int n)
{
while(n != 0)
{
scanf("%d", &L->data[L->rear]);
L->rear++;
n--;
}
}
void move(Sqlist *&L, int n, int e)
{
int a[Maxsize];
int i;
for(i=0; i<e; i++)
{
a[i] = L->data[i];
L->data[L->rear] = a[i];
L->rear++;
}
}
int main()
{
int n, e;
Sqlist *L;
Init(L);
scanf("%d", &n);
Creat(L, n);
scanf("%d", &e);
if(e<0 || e>n)
{
printf("error!");
}
else
{
move(L, n, e);
for(int i=e; i<e+n; i++)
printf("%d ", L->data[i]);
}
return 0;
}
注意
该程序仅供学习参考!