动态顺序表相对于静态顺序表变了些什么?

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++;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值