这道题的主要思想是依次移动元素的位置来实现元素位置的互换。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LISTSIZE 100
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
int Initialist(Sqlist *L){/*顺序表的初始化*/
L->elem=(int *)malloc(LISTSIZE*sizeof(Sqlist));/*为顺序表申请内存空间*/
if (!L->elem) exit(-1);
L->length=0;
L->listsize=LISTSIZE;
return 1;
}
int Insertsqlist(Sqlist *L,int i,int e){/*在顺序表中插入一个元素*/
if (i<1||i>L->length+1) printf("error");
int *q=&(L->elem[i-1]);/*首先找到要插入位置的前一个位置的地址*/
int *p;
for (p=&(L->elem[L->length-1]);p>=q;p--)/*从最后一个元素开始依次向后移动*/
*(p+1)=*p;
*q=e;
L->length++;
return 1;
}
int Removelist(Sqlist *L,int n){/*通过依次移动元素的位置来实现前面元素与后面元素位置的交换*/
int i;
for (i=0;i<n;i++){/*把前面的元素依次移动到最后面*/
L->elem[L->length]=L->elem[i];
L->length++;
}
return 1;
}
int main(){
int i,j,n,d,m,k;
scanf("%d",&k);
while (k){
scanf("%d %d",&n,&m);
Sqlist L;
Initialist(&L);
for (i=1;i<=n;i++){
scanf("%d",&d);
Insertsqlist(&L,i,d);
}
Removelist(&L,m);
for (i=m;i<L.length;i++)
printf("%d ",L.elem[i]);
printf("\n");
k--;
}
return 0;
}

351

被折叠的 条评论
为什么被折叠?



