直接上代码
#include<stdio.h>
#include<stdlib.h>
#define LIST_SIZE1 10
#define LIST_SIZE2 5
#define ok 1
#define no 0
typedef struct {
int *elem;
int length;
int listsize;
}Sqlist;
//初始化一个顺序表
int InitList(Sqlist *l){
l->elem=(int *)malloc(LIST_SIZE1*sizeof(int));
if(!l->elem) exit(ok);
l->length=0;
l->listsize=LIST_SIZE1;
return ok;
}
//在顺序表中的第i个位置插入元素e
int ListInsert(Sqlist *l,int i,int e){
if(!l->length){
l->length++;
l->elem[l->length-1]=e;
return ok;
}
else if(i<1||i>l->length+1){
printf("输入的位置有误!\n");
exit(ok);
}
if(l->length==l->listsize){
int *newbase;
newbase=(int *)realloc(l->elem,(l->length+LIST_SIZE2)*sizeof(int));
if(!newbase) exit(ok);
l->elem=newbase;
l->listsize+=LIST_SIZE2;
}
int *p;
p=l->elem+l->length-1;
while(p>=l->elem+i-1)
*(p+1)=*p--;
l->elem[i-1]=e;
l->length++;
return ok;
}
//实现顺序表的逆置
int ListInvert(Sqlist *l){
int t,i;
int *head=l->elem,*end=l->elem+l->length-1;
for(i=0;i<l->length/2;i++){
t=*(head+i);
*(head+i)=*(end-i);
*(end-i)=t;
}
return ok;
}
//输出顺序表中的数据
void Outlist(Sqlist *l){
int i;
for(i=0;i<l->length;i++)
printf("%d ",l->elem[i]);
printf("\n");
}
int main(){
Sqlist l;
InitList(&l);
printf("请输入一组数据(0表示结束)\n");
int num,i=1;
scanf("%d",&num);
while(num){
ListInsert(&l,i,num);
i++;
scanf("%d",&num);
}
printf("顺序表中的元素有\n");
Outlist(&l);
ListInvert(&l);
printf("转置后的结果为\n");
Outlist(&l);
return ok;
}