不定长顺序表

不定长顺序表

即空间大小会随着存放数据的多少而变化,比如存放数据增加时,会先进行扩展内存,然后进行存放数据。

基础知识

在这里插入图片描述
length //当前顺序表中数据元素的个数
listsize //当前顺序表的空间大小

基本内容

1、初始化
2、扩容
3、插入
【1】头插
【2】按位置插入
【3】尾插
4、删除
【1】头删
【2】按位置删
【3】尾删
5、清空
6、销毁

初始化

【1】先判空
【2】置空

代码示例
void InitUSeqList(PUList list)
{
DeterPointIsNull(list);
list->data = NULL;
list->length = list->size = 0;
}
扩容

方案:在原始空间大小 + INITSIZE大小

基本规则

【1】申请扩展空间
【2】判空
【3】原始数据拷贝给新空间
【4】释放原始数据空间
【5】将新空间首地址复制给list->data
【6】链表扩充

代码示例
static void AppendSpace(PUList list)
{
ElemType *s = (ElemType *)malloc(sizeof(ElemType)*(list->length + INITSIZE));
assert(s != NULL);
for (int i = 0; i < list->length; ++i)
{
s[i] = list->data[i];
}
free(list->data);
list->data = s;
list->size += INITSIZE;
}
按位置插入

此部分和定长顺序表略有差异

基本规则

【1】判断链表是否为空
【2】判断pos位置是否合法
【3】判断当前顺序表是否为满,如果满,则进行扩容
【4】将pos位置及其后数据统一向后移一个位置
【5】将插入值放入放到pos位置
【6】链表大小+1

代码示例
int        InserUSeqListPos(PUList list, ElemType val, int pos)
{
DeterPointIsNull(list);
if (pos<0||pos>list->length>0)
{
printf("pos is erro,Insert fail\n");
return 0;
}
if (list->length==list->size)
{
AppendSpace(list);
}
for (int i = list->length; i <pos ; --i)
{
list->data[i] = list->data[i - 1];
}
list->data[pos] = val;
list->length++;
return 1;
}
删除

删除部分和上篇定长顺序表的套路思想一样,
这里就不做过多说明了。

清空

【1】链表判空
【2】链表大小置为0

代码示例
void ClearUSeqList(PUList list)
{
DeterPointIsNull(list);
list->length = 0;
}
销毁

【1】判空
【2】数据清理

代码示例
void DestroyUSeqList(PUList list)
{
DeterPointIsNull(list);
free(list->data);
list->data = NULL;
list->length = list->size = 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值