以上为题目。
代码为:
#include <stdio.h>
#include <stdlib.h>
#define List_init_size 1000000
#define Error 0
#define Ok 1
//typedef int Element;//此处未用自定义
typedef struct
{
int *elem;
int length;
int listsize;
}Sqlist;
int Initlist(Sqlist *L)//顺序表初始化
{
L->elem=(int *)malloc(List_init_size*sizeof(int));
if(!L->elem)return -1;
L->length=0;
L->listsize=List_init_size;
return 0;
}
int Createlist(Sqlist *L,int len)//顺序表的元素输入
{
int i;
for(i=0;i<len;i++)
{
scanf("%d",&L->elem[i]);
}
L->length=len;
}
int Invert(Sqlist *L,int s,int t)
{//将从s到t的一段元素逆置
int i,j;
int k;
i=s;
j=t;
while(i<=j)
{
k=L->elem[i];
L->elem[i]=L->elem[j];
L->elem[j]=k;
i++;
j--;
}
return 0;
}
void Exchange(Sqlist *L,int m)//逆置函数
{
int n;
n=L->length-m;
Invert(L,0,m+n-1);//将整个顺序表逆置
Invert(L,0,n-1);//逆置之后后N个元素变为前N个
//将前N个元素逆置
Invert(L,n,m+n-1);//将后M个元素逆置
}//此处需注意元素下标与元素位序的关系
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",&len);
scanf("%d",&m);
Initlist(&L);
Createlist(&L,len);
Exchange(&L,m);
Display(&L);
}
return 0;
}
此代码在codeblocks环境中运行