SeqlistD.h
#pragma once #include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef int DataType; typedef unsigned int size_t; typedef struct SeqListD { DataType* _array; size_t _capacity; // 底层空间的大小 size_t _size; // 有效元素的个数 }SeqListD, *PSeqListD; ///////////////////////////////////////////////// void SeqListDInit(PSeqListD pSeq); void SeqListDPushBack(PSeqListD pSeq, DataType data); void SeqListDPopBack(PSeqListD pSeq); void SeqListDInsert(PSeqListD pSeq,int pos,DataType data); void SeqListDErase(PSeqListD pSeq,int pos); int SeqListDEmpty(PSeqListD pSeq); size_t SeqListDSize(PSeqListD pSeq); // 清空顺序表中的所有元素,注意不改变底层空间的大小 void SeqListDClear(PSeqListD pSeq); size_t SeqListDCapacity(PSeqListD pSeq); // 销毁顺序表 void SeqListDDestroy(PSeqListD pSeq); // 检测顺序表是否需要增容 int CheckCapacity(PSeqListD pSeq); void PrintfSeqlistD(PSeqListD pSeq); //////////////////////////////////////////////////// void SeqListDInit(PSeqListD pSeq) //初始化 { if(NULL==pSeq) return; pSeq->_array=(DataType* )malloc(3*sizeof(DataType)); pSeq->_capacity=3; pSeq->_size=0; } void SeqListDPushBack(PSeqListD pSeq, DataType data) //尾插 { if(NULL==pSeq) return; CheckCapacity(pSeq); pSeq->_array[pSeq->_size++]=data; } void SeqListDPopBack(PSeqListD pSeq) //尾删 { if(NULL==pSeq) return; pSeq->_array[pSeq->_size-1]=0; pSeq->_size--; } void SeqListDInsert(PSeqListD pSeq,int pos,DataType data) //任意位置插入 { int i=0; if(NULL==pSeq) return; CheckCapacity(pSeq); for (i=pSeq->_size-1;i>=pos-1;i--) { pSeq->_array[i+1]=pSeq->_array[i]; } pSeq->_array[pos-1]=data; pSeq->_size++; } void SeqlistDErase(PSeqListD pSeq,int pos) //任意位置删除 { int i=0; if(NULL==pSeq) return; for (i=pos;i<pSeq->_size;i++) { pSeq->_array[i-1]=pSeq->_array[i]; } pSeq->_size--; } size_t SeqListDSize(PSeqListD pSeq) { if(NULL==pSeq) exit(EXIT_FAILURE); return pSeq->_size; } // 清空顺序表中的所有元素,注意不改变底层空间的大小 void SeqListDClear(PSeqListD pSeq) { if(NULL==pSeq) return; pSeq->_size=0; } size_t SeqListDCapacity(PSeqListD pSeq) { if(NULL==pSeq) exit(EXIT_FAILURE); return pSeq->_capacity; } // 销毁顺序表 void SeqListDDestroy(PSeqListD pSeq) { if(NULL==pSeq) return; free(pSeq->_array); pSeq->_array=NULL; pSeq->_capacity=0; pSeq->_size=0; } // 检测顺序表是否需要增容 int CheckCapacity(PSeqListD pSeq) { DataType* tmp=NULL; if(NULL==pSeq) return 0; if(pSeq->_capacity==pSeq->_size) { size_t newCapacity=pSeq->_capacity*2; tmp=(DataType*)realloc(pSeq->_array,newCapacity*sizeof(DataType)); if(NULL==tmp) return 0; pSeq->_array=tmp; pSeq->_capacity=newCapacity; } return 0; } void PrintfSeqlistD(PSeqListD pSeq) { size_t i=0; if(NULL==pSeq) return; for (;i<pSeq->_size;i++) { printf("%d ",pSeq->_array[i]); } printf("\n"); }
testSeqlistD.c
#define _CRT_SECURE_NO_WARNINGS 1 #include "SeqlistD.h" void testSelistD() { SeqListD s; SeqListDInit(&s); SeqListDPushBack(&s,1); //尾插 SeqListDPushBack(&s,2); SeqListDPushBack(&s,3); SeqListDPushBack(&s,4); SeqListDPushBack(&s,5); SeqListDPushBack(&s,6); printf("Capacity = %u ",SeqListDCapacity(&s)); printf("Size = %u \n",SeqListDSize(&s)); PrintfSeqlistD(&s); // SeqListDPopBack(&s); //尾删 SeqListDInsert(&s,2,9); //任意位置插入 printf("Capacity = %u ",SeqListDCapacity(&s)); printf("Size = %u \n",SeqListDSize(&s)); PrintfSeqlistD(&s); SeqlistDErase(&s,7); //任意位置删除 printf("Capacity = %u ",SeqListDCapacity(&s)); printf("Size = %u \n",SeqListDSize(&s)); PrintfSeqlistD(&s); SeqListDDestroy(&s); //在结束时应该销毁申请的堆空间,否则会造成内存泄漏
} int main() { testSelistD(); return 0; }