实现动态顺序表

SeqList.h

#pragmaonce#include<stdio.h>#include<string.h>#include<assert.h>#include<malloc.h>typedefintDataType;typedefstructSeqList{DataType*arry;size_tsize;size_tcapacity;}SeqList;voidcheck(SeqList*Seq);//判断指针是否有效,并动态开辟内存voidInitSeqList(SeqList*Seq);//初始化结构体voidPrintSeqList(SeqList*Seq);//输出函数voidPushBack(SeqList*Seq,DataTypex);//后插voidPopBack(SeqList*Seq);//后删intFind(SeqList*Seq,DataTypex);//查找数据voidErase(SeqList*Seq,size_tpos);//清除第几个数据voidRemove(SeqList*Seq,DataTypex);//删除第一个数据xvoidRemoveall(SeqList*Seq,DataTypex);//删除所有的xvoidModify(SeqList*Seq,size_tpos,DataTypex);//把第pos个数据修改成xvoidInsert(SeqList*Seq,size_tpos,DataTypex);//把第pos个数据插入xvoidcheck(SeqList*Seq){assert(Seq);if(Seq->size>=Seq->capacity){DataType*tmp;Seq->capacity*=2;tmp=(DataType*)malloc(sizeof(DataType)*(Seq->capacity));memcpy(tmp,Seq->arry,sizeof(DataType)*(Seq->size));free(Seq->arry);Seq->arry=tmp;}}voidInitSeqList(SeqList*Seq){assert(Seq);Seq->capacity=2;Seq->arry=(DataType*)malloc(sizeof(DataType)*Seq->capacity);Seq->size=0;}voidPrintSeqList(SeqList*Seq){inti=0;for(i=0;i<(int)Seq->size;i++){printf("%d\n",Seq->arry[i]);}}voidPushBack(SeqList*Seq,DataTypex){check(Seq);Seq->arry[Seq->size++]=x;}voidPopBack(SeqList*Seq){assert(Seq);if(Seq->size==0){printf("顺序表已空!\n");return;}--(Seq->size);}voidPushFront(SeqList*Seq,DataTypex){check(Seq);inti=Seq->size-1;for(;i>=0;i--){Seq->arry[i+1]=Seq->arry[i];}Seq->arry[0]=x;++Seq->size;}voidPopFront(SeqList*Seq){assert(Seq);inti=0;if(Seq->size==0){printf("顺序表已空!\n");return;}for(;i<=(int)Seq->size;i++){Seq->arry[i]=Seq->arry[i+1];}--Seq->size;}voidRemove(SeqList*Seq,DataTypex){assert(Seq);inti=0;for(;i<(int)Seq->size;i++){if(Seq->arry[i]==x){Seq->arry[i]=Seq->arry[i+1];}}--Seq->size;}voidRemoveall(SeqList*Seq,DataTypex){assert(Seq);intfirstIndex=0;intsecondIndex=0;intcount=0;while(secondIndex<=(int)Seq->size){if(Seq->arry[secondIndex]==x){count++;}else{Seq->arry[firstIndex]=Seq->arry[secondIndex];firstIndex++;}secondIndex++;}Seq->size-=count;}intFind(SeqList*Seq,DataTypex){assert(Seq);inti=0;for(;i<(int)Seq->size;i++){if(Seq->arry[i]==x){returnSeq->arry[i];}else{return-1;}}return0;}voidErase(SeqList*Seq,size_tpos){assert(Seq);inti=pos-1;for(;i<(int)Seq->size-1;i++){Seq->arry[i]=Seq->arry[i+1];}--Seq->size;}voidModify(SeqList*Seq,size_tpos,DataTypex){check(Seq);inti=0;for(;i<(int)Seq->size-1;i++){if(i==pos){Seq->arry[i]=x;}}}voidInsert(SeqList*Seq,size_tpos,DataTypex){check(Seq);inti=Seq->size-1;for(;i>=(int)pos;i--){Seq->arry[i+1]=Seq->arry[i];}Seq->arry[pos]=x;Seq->size++;}Test.c#include<stdio.h>#include"SeqList.h"SeqListSeq;/*voidtest(){PushBack(&Seq,1);PushBack(&Seq,2);PushBack(&Seq,3);PushBack(&Seq,4);PopBack(&Seq);PrintSeqList(&Seq);}*/voidtest1(){PushFront(&Seq,1);PushFront(&Seq,2);PushFront(&Seq,2);PushFront(&Seq,3);PushFront(&Seq,4);//Remove(&Seq,2);//Removeall(&Seq,2);//Erase(&Seq,1);Modify(&Seq,3,5);//Insert(&Seq,4,6);PrintSeqList(&Seq);}intmain(void){InitSeqList(&Seq);test1();system("pause");return0;}