資料結構--C語言--順序表元素的逆置
阿新 • • 發佈:2018-11-29
#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); }