下面是代码:
#include <stdio.h>
#include <stdlib.h>
#define List_init_size 1000000
#define Error 0
#define Ok 1
typedef int Element;
typedef struct
{
Element *elem;
int length;
int listsize;
}Sqlist;
int Initlist(Sqlist *L)//初始化顺序表
{
L->elem=(Element *)malloc(List_init_size*sizeof(Element));
if(!L->elem)return Error;
L->length=0;
L->listsize=List_init_size;
return Ok;
}
void Createlist(Sqlist *L,int len)//输入顺序表元素
{
int i;
for(i=0;i<len;i++)
{
scanf("%d",&L->elem[i]);
}
L->length=len;//顺序表长度
}
void Exchange(Sqlist *L,int m)//移位函数
{
int k,i,j,x;
for(i=0,j=m;j<L->length;j++,i++)//a[j]为第m+1个元素
{
x=L->elem[j];//先将元素取出,然后在下面再进行覆盖
for(k=j;k>i;k--)
{
L->elem[k]=L->elem[k-1];
}
L->elem[i]=x;//将此元素置于前面
}
}
void Display(Sqlist *L)//输出函数
{
int i;
for(i=0;i<L->length;i++)//利用三目运算符比较简单
{
printf(i==(L->length-1)?"%d\n":"%d ",L->elem[i]);
}
}
int main()
{
int n,len,m,i;
Sqlist L;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&len,&m);
Initlist(&L);
Createlist(&L,len);
Exchange(&L,m);
Display(&L);
}
return 0;
}
此代码在codeblocks环境中运行
此题目也可以用另外一种算法,
设顺序表长度为n,将前面M个元素移动到顺序表的后面,然后在输出的时候从第M+1个元素开始输出,此算法较为简单实现。