C語言實現動態順序表(Linux環境)
阿新 • • 發佈:2018-12-18
SeqList.h
/************************************************************************* > File Name: SeqList.h > Author: > Mail: > Created Time: Tue Oct 23 19:16:35 2018 ************************************************************************/ #ifndef _SEQLIST_H #define _SEQLIST_H #include<assert.h> #include<stdio.h> #include<stdlib.h> typedef int DataType; typedef struct SeqList { DataType* array; int size;//尺寸,裡面有多少東西 int capacity;//容量 對應MAX_SIZE }SList; //初始化動態順序表 void SeqListInit(SList* pSeq) { const int init_capacity = 5;//容量固定 assert(pSeq != NULL); pSeq->size = 0;//size 置零 pSeq->capacity = init_capacity; pSeq->array = (DataType *)malloc(sizeof(DataType)* init_capacity); assert(pSeq->array); } //銷燬動態順序表 void SeqListDestroy(SList* pSeq) { free(pSeq->array); pSeq->array = NULL; pSeq->size = 0; pSeq->capacity = 0; } //判斷是否要進行擴容 void ExpandIfRequired(SList* pSeq) { //表未滿,不需要擴容 if(pSeq->size < pSeq->capacity) { return ; } //表已經滿了,需要擴容 int newCapacity = pSeq->capacity * 2;//一般情況,一個不夠給兩個,再不夠給定三個 capacity DataType* newArray = (DataType *)malloc(sizeof(DataType) * newCapacity); assert(newArray); int i = 0; for(i = 0; i < pSeq->size; i++) { newArray[i] = pSeq->array[i];//搬移陣列,將老陣列元素搬移到新陣列中 } free(pSeq->array);//釋放老陣列空間 pSeq->array = newArray;//更新新陣列 pSeq->capacity = newCapacity;//更新 capacity } //動態順序表尾插 void SeqListPushBack(SList* pSeq, DataType data) { assert(pSeq != NULL); //擴容 ExpandIfRequired(pSeq);//呼叫判斷是否進行擴容函式 pSeq->array[pSeq->size++] = data; } //動態順序表列印 void SeqListPrint(const SList* pSeq) { int i = 0; for(i = 0; i <pSeq->size; i++) { printf("%d ", pSeq->array[i]); } printf("\n"); } void SeqListTest() { SList pSeq; SeqListInit(&pSeq);//初始化動態順序表 /* 尾插除錯 */ SeqListPushBack(&pSeq, 1); SeqListPushBack(&pSeq, 2); SeqListPushBack(&pSeq, 3); SeqListPushBack(&pSeq, 4); SeqListPushBack(&pSeq, 5); /* 列印尾插之後的順序表 */ SeqListPrint(&pSeq); } #endif
test.c
/************************************************************************* > File Name: test.c > Author: > Mail: > Created Time: Tue Oct 23 19:34:22 2018 ************************************************************************/ #include"SeqList.h" int main() { SeqListTest(); return 0; }