【数据结构】:线性表之动态顺序表(基于静态顺序表的完善)

前言

继上一篇:【数据结构】:线性表之静态顺序表。在该文章的结尾我们说了静态顺序表是固定大小的,今天我们来实现动态增容的顺序表。

1.存储结构

动态增容的顺序表和静态顺序表的没有变化。

typedef int ElemType;

typedef struct SeqList
{
   ElemType *base; 
   int capacity; //顺序表最大容量
   int size; //顺序表当前容量
}SeqList;

2.动态增容的代码

增容成功返回1,不成功返回0,一般增加容量的大小为2倍较为合理。

提示:前提需要了解c库函数中的reallc函数的使用方式。

bool Inc_capacity(SeqList* list)
{
	ElemType* newBase = (ElemType*)realloc(list->base, sizeof(ElemType)*SEQLIST_INT_SIZE *2);
	if (newBase == NULL)
		return 0;
	list->capacity *= 2;
	return 1;
}

3.尾插

void Push_back(SeqList* list, ElemType x)
{
	//如果容量不够时候判断 是否增容成功 ,成功就插入元素
	if (list->size >= list->capacity && !Inc_capacity(list))
		return;
	list->base[list->size++] = x; 
}

4.头插

注意体会该语句的含义if (list->size >= list->capacity && !Inc_capacity(list))

void Push_front(SeqList* list, ElemType x)
{
	if (list->size >= list->capacity && !Inc_capacity(list))
		return;
	//头插 
	for (int tail = list->size - 1; tail >= 0; tail--)
	{
		list->base[tail+1] = list->base[tail];
	}
	//插入元素
	list->base[0] = x;
	list->size++;

5.按位置插入

void Insert_position(SeqList* list, int pos, ElemType x)
{
	if (pos < 0 || pos>list->capacity)
		return;
	if (list->size >= list->capacity && !Inc_capacity(list))
		return;
	for (int index = list->size - 1; index >= pos; index--)
	{
		list->base[index+1] = list->base[index];
	}
	list->base[pos] = x;
	list->size++;
}

总结

其实动态增容也就是在插入算法时候起作用。其他的算法和静态顺序表没什么区别。
共勉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呋喃吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值