动态顺序表(可扩容)的基本操作
2017-04-24 11:50
330 查看
头文件:
顺序表实现的代码
#define _CRT_SECURE_NO_WARNINGS 1 #ifndef _STATICSEQLIST_H__ #define _STATICSEQLIST_H__ #include<stddef.h> #include<assert.h> #include<string.h> #include<stdlib.h> #include<stdio.h> #define MAXSIZE 10 #define CAPACITYSIZE 10 typedef int DataType; //#define DataType int typedef struct Node { DataType *array; DataType size; DataType capacity; }SeqlistD,*PSeqlistD; void InitSeqlistD(PSeqlistD seq); void PushBack(PSeqlistD seq,DataType data); void PrintSeqlist(PSeqlistD seq); void PopBack(PSeqlistD seq); void PushFront(PSeqlistD seq,DataType data); void PopFront(PSeqlistD seq); void Insert(PSeqlistD seq,DataType pos,DataType data); void Erase(PSeqlistD seq,DataType pos); oid PopBack(PSeqlist seq); #endif //_STATICSEQLIST_H__
顺序表实现的代码
#include"SeqlistD.h" void InitSeqlistD(PSeqlistD seq) //初始化动态顺序表 { assert(seq); seq->array = (DataType*)malloc(CAPACITYSIZE*sizeof(DataType)); assert(seq->array); seq->size = 0; seq->capacity = CAPACITYSIZE; } int CheckCapacity(PSeqlistD seq) //检查容量 { assert(seq); if(seq->size ==seq->capacity) { DataType *ptmp = (DataType*)malloc((CAPACITYSIZE+seq->capacity)*sizeof(DataType)); if(ptmp ==NULL) { return 0; } seq->array = ptmp; seq->capacity += CAPACITYSIZE; } return 1; } void PushBack(PSeqlistD seq,DataType data) //后插动态顺序表 { assert(seq); if(CheckCapacity(seq)) { seq->array[seq->size++] = data; } } void PopBack(PSeqlistD seq) { assert(seq); if(seq->size == 0) { return; } seq->size--; } void PushFront(PSeqlistD seq,DataType data) //前插动态顺序表 { DataType idx = 0; assert(seq); if(CheckCapacity(seq)) { for(idx=seq->size; idx>0; --idx) { seq->array[idx] = seq->array[idx-1]; } seq->array[0] = data; } } void PopFront(PSeqlistD seq) { DataType idx = 0; assert(seq); for(; idx<seq->size; ++idx) { seq->array[idx] = seq->array[idx+1]; } seq->size--; } void Insert(PSeqlistD seq,DataType pos,DataType data) //动态顺序表任意位置插入 { DataType idx = 0; assert(seq); for(idx = seq->size-1; idx>=pos; --idx) { seq->array[idx+1] = seq->array[idx]; } seq->array[pos] = data; seq->size++; } void Erase(PSeqlistD seq,DataType pos) { DataType idx = 0; assert(seq); for(idx=pos; idx<seq->size-1; ++idx) { seq->array[idx] = seq->array[idx+1]; } seq->size--; } void PrintSeqlist(PSeqlistD seq) //打印顺序表 { int idx = 0; assert(seq); for(; idx<seq->size; ++idx) { printf("%d ",seq->array[idx]); } printf("\n"); }