1.在创建结构体时新增了顺序表容量的变量
typedef struct SepList_d
{
DataType *pData; //顺序表存储户
size_t size; //顺序表中元素个数
size_t capacity; //顺序表的容量(可以容纳的元素的个数)
}SeqList, *pSeqList;
2.初始化顺序表时略有不同
void InitSeqList(pSeqList pSeq)
{
assert(pSeq);
pSeq->pData = (dataType*)malloc(sizeof(DataType)* 5);
if (pSeq->pData == NULL)
{
//开辟失败;return;
}
memset(pSeq->pData, 0, sizeof(DataType)* 5);
pSeq->capacity = 5;
pSeq->size = 0;
}
3.新增了检测顺序表是否达到最大容量,到达最大容量时增容的代码块
void Chack_Capacity(pSeqList pSeq)
{
assert(pSeq);
if (pSeq->sz >= pSeq->capacity)
{
DataType* temp = pSeq->pData;
DataType Newcapacity = pSeq->capacity + 5;
pSeq->pData = (DataType*)realloc(pSeq->pData, sizeof(DataType)*Newcapacity);
if (pSeq->pData == NULL)
{
printf(“开辟容量失败;\n”);//开辟失败
pSeq->pData = temp;
return -1;
}
else
pSeq->capacity = Newcapacity;
return 1;
}
}
4.在进行增加顺序表内容操作时加入了检测数据是否到达顺序表最大容量的代码块
//以尾插为例
void PushBack(pSeqList pSeq, DataType data)
{
int ret = 0;
size_t index = 0; //因为下标是不可能为负数的,所以次数定义为无符号整型比较好
assert(pSeq);
ret = Check_Capacity(pSeq); //根据函数返回值确定是否扩容成功(不需要扩容的情况也算作扩容成功)
if (1 == ret)
{
pSeq->pData[pSeq->size] = data; //指针指向的内容也可以用数组下标的形式来访问
pSeq->size++;
}
}