#pragma once #include<stdio.h> #include<assert.h> #include<malloc.h> #include<string.h> typedef int DataType; typedef struct SeqList { DataType* _array; size_t _size; size_t _capacity; }SeqList; void IniSeqList(SeqList* pSeq) { assert(pSeq); pSeq->_capacity =3; pSeq->_array =(DataType*)malloc(sizeof(DataType)*pSeq->_capacity ); pSeq->_size =0; } void PrintSeqList(SeqList* pSeq)//打印 { int i=0; assert(pSeq); for(;i<pSeq->_size ;i++) { printf(" %d ",pSeq->_array [i]); } printf("\n"); } void checkempty(SeqList* pSeq)//判断是否为空 { assert(pSeq); if(pSeq->_size ==0) { printf("SeqList is empty\n"); return; } } void CheckCap(SeqList* pSeq)//增容 { if(pSeq->_size >=pSeq->_capacity ) { DataType* tmp; pSeq->_capacity *=2; tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity ); memcpy(tmp,pSeq->_array ,sizeof(DataType*)*pSeq->_size ); free(pSeq->_array ); pSeq->_array =tmp; } } void PushBack(SeqList* pSeq,DataType x)//尾插 { assert(pSeq); CheckCap(pSeq); pSeq->_array [pSeq->_size ++]=x; } void PopBack(SeqList* pSeq)//尾删 { assert(pSeq); --pSeq->_size ; } void PushFront(SeqList* pSeq,DataType x)//头插 { int i=pSeq->_size ; assert(pSeq); CheckCap(pSeq); for(;i>=0;i--) { pSeq->_array [i+1]=pSeq->_array [i]; } pSeq->_array [0]=x; ++pSeq->_size ; } void PopFront(SeqList* pSeq)//头删 { int i=1; assert(pSeq); checkempty(pSeq); for(;i<=pSeq->_size ;i++) { pSeq->_array [i-1]=pSeq->_array [i]; } pSeq->_size-- ; } void Insert(SeqList* pSeq,size_t pos,DataType x)//任意位置插入 { int i=pSeq->_size; assert(pSeq); CheckCap(pSeq); for(;i>=(int)pos;--i) { pSeq->_array [i]=pSeq->_array [i-1]; } pSeq->_array [pos]=x; pSeq->_size ++; } void Erase(SeqList* pSeq,size_t pos)//橡皮擦 { int i=pos ; assert(pSeq); checkempty(pSeq); for(;i<pSeq->_size ;i++) { pSeq->_array [i]=pSeq->_array [i+1]; } pSeq->_size --; } void Remove(SeqList* pSeq,DataType x)//对应位置删除 { int i=0; int begin=0; assert(pSeq); checkempty(pSeq); for(;i<pSeq->_size ;i++) { if(pSeq->_array [i]==x) { begin=i; for(;begin<pSeq->_size ;begin++) { pSeq->_array [begin]=pSeq->_array [begin+1]; } } } --pSeq->_size; } void RemoveALL(SeqList* pSeq,DataType x)//删除所有x { int count=0; size_t first=0; size_t second=0; assert(pSeq); checkempty(pSeq); while(second<pSeq->_size ) { if(pSeq->_array [second]==x) { count++; } else { pSeq->_array [first]=pSeq->_array [second]; first++; } second++; } pSeq->_size -=count; } #include"SeqList_D.h" void Test1() { SeqList s; IniSeqList(&s); PushBack(&s,1);//尾插 PushBack(&s,2); PushBack(&s,3); PushBack(&s,4); PushBack(&s,5); PrintSeqList(&s);//打印 PushFront(&s,2);//头插 PrintSeqList(&s);//打印 PopFront(&s);//头删 PrintSeqList(&s);//打印 } void Test2() { SeqList s; IniSeqList(&s); PushBack(&s,1);//尾插 PushBack(&s,2); PushBack(&s,3); PushBack(&s,4); PushBack(&s,6); PushBack(&s,2); PushBack(&s,2); PushBack(&s,5); PrintSeqList(&s);//打印 //Erase(&s,2);//橡皮擦 //PrintSeqList(&s);//打印 //Remove(&s,2);//对应位置删除 //PrintSeqList(&s);//打印 RemoveALL(&s,2);//删除所有x PrintSeqList(&s);//打印 } int main() { Test2(); system("pause"); return 0; }
原文地址:http://760470897.blog.51cto.com/10696844/1753227