#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define OVERFLOW 0
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 5
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){
printf("存储空间分配失败!\n");
exit(OVERFLOW);
}
l->length = 0;
l->listsize = LIST_INIT_SIZE;
return OK;
}
//给顺序表赋值
int CreatList(Sqlist *l,int length){
printf("请输入元素值:\n");
for(int i=0;i<length;i++){
scanf("%d",l->elem+i);
}
l->length = length;//如果不给length赋值的话就一直是0 无法进行逆置和输出
return OK;
}
//输出顺序表
void PrintList(Sqlist *l){
for(int i=0;i<l->length;i++) {
printf("%d ",l->elem[i]);
}
}
//是否需要增加分配空间
int IncreaseList(Sqlist *l,int length){
if(length>l->listsize){
int *newbase;
newbase = (int *)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
if(!newbase){
printf("存储空间分配失败!\n");
exit(OVERFLOW);
}
l->elem = newbase;
l->listsize += LISTINCREMENT;
}
return OK;
}
//逆置函数
int TransList(Sqlist *l){
for(int i=0;i<(l->length)/2;i++){
int temp = l->elem[i];
l->elem[i] = l->elem[l->length-1-i];
l->elem[l->length-1-i] = temp;
}
return OK;
}
main(){
int length;
Sqlist l;
InitList(&l);
printf("你想输入多少个元素?\n");
scanf("%d",&length);
IncreaseList(&l,length);//是否需要增加分配空间
CreatList(&l,length);
PrintList(&l);
printf("\n逆置后的结果为:\n");
TransList(&l);
PrintList(&l);
}