动态顺序表的实现
使用C语言实现动态顺序表。
首先定义顺序表的数据类型的结构:
typedef int SLDataType;
typedef struct seqList
{
SLDataType* _data;
size_t _size;
size_t _capacity;
}seqList;
顺序表有3个成员变量。size表示当前表内的数据个数。capacity表示表的容量。由于是动态顺序表,不能直接使用数组存储数据,而是需要申请动态内存,因此设置_data成员变量为指针类型。
主要涉及以下若干个函数的实现:
void initSeqList(seqList* sl);
void checkCapacity(seqList* sl);
void pushBack(seqList* sl, SLDataType val);
void printSeqList(seqList* sl);
void pushFront(seqList* sl, SLDataType val);
void popfront(seqList* sl);
void insert(seqList* sl, int pos, int val);
void erase(seqList* sl, int pos);
int empty(seqList* sl);
int size(seqList* sl);
int findIdx(seqList* sl, SLDataType val);
SLDataType getIdx(seqList* sl, SLDataType pos);
void destroySeqList(seqList* sl);
下面叙述它们的具体实现。
initSeqList:
在对顺序表进行操作之前一定要先进行初始化。
void initSeqList(seqList* sl){
sl->_data = NULL;
sl->_capacity = 0;
sl->_size = 0;
}
checkCapacity:
在增加数据时,必须先检查容量是否充足,否则容易引起内存访问越界的问题。这里先对指针sl进行判空,然后再检查数据数量是否已经达到上限。若是添加第一个数据,则开辟一个数据的空间;若不是,则将现有的空间扩大2倍,并将原有数据拷贝至新内存空间中,最后释放原内存空间。使用realloc函数就可以完成这一操作。最后一步要记得将_capacity成员变量的值进行更新。
void checkCapacity(seqList* sl){
if (sl == NULL){
return;
}
if (sl->_cap