一学就会的顺序表 —— 结构及各种接口 ( 头插 删、尾插 删、特定位置查找 插入 删除 ) 的实现_顺序表 尾插

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

if (psl->size == psl->capacity) //当空间满时,进行动态扩容
{
	size\_t newcapacity = psl->capacity == 0 ? 4 : psl->capacity \* 2; //以两倍的方式扩容
	psl->a = realloc(psl->a, newcapacity \* sizeof(SQDataType));
	psl->capacity = newcapacity;
}

}


## 销毁顺序表


在使用完顺序表后我们要销毁掉顺序表以避免内存泄露的问题,如下



void SeqListDestory(SLT* ps1)
{
assert(ps1);
if (ps1->a)
{
free(ps1->a);//释放掉指针
ps1->a = NULL;//并将指针置空
}
ps1->size = ps1->capacity = 0;
}


## 打印顺序表


为了能够看见我们对表的操作,我们还需一个打印出顺序表的接口:



void SeqListPrint(SLT* ps1)
{
assert(ps1);
int i = 0;
for (i = 0; i < ps1->size; i++)
{
printf(“%d “, ps1->a[i]);
}
printf(”\n”);
}


## 增加数据


### 头插


即在整个表的头部插入数据,实现头插我们要进行的操作就是将整个表的数据都向后挪动一个位置,这样顺序表的头部就会空出一个位置,我们将要插入的数据放入其中即可,实现如下:



void SeqListPushFront(SLT* psl, SQDataType x)
{
assert(psl);
SeqListCheckCapacity(psl); //头插前检查容量是否满
int end = psl->size - 1;
int i = 0;
for (i = end; i >= 0; i–)
{
psl->a[i+1] = psl->a[i];//将数据都向后挪一个位置
}
psl->a[0] = x;
psl->size++; //头插后表的数据个数增加一个
}


### 尾插


尾插就很简单实现,直接在表末放入数据即可



void SeqListPushBack(SLT* ps1, SQDataType x)
{
assert(ps1);
SeqListCheckCapacity(ps1);
ps1->a[ps1->size] = x;
ps1->size++;
}


### 特定位置插入


当我们想在表的特定位置(任意位置)插入数据时,首先要知道想插入位置的下标(pos),然后依次再将表中从该下标开始到表尾的数据向后挪动一个位置,再将想插入的数据放入下标为 pos 的位置即可



void SeqListInsert(SLT* psl, size_t pos, SQDataType x)
{
assert(psl);
assert(pos <= psl->size && pos >= 0); //保证插入的位置合理
SeqListCheckCapacity(psl); //插入前检查容量的大小
int end = psl->size;
while (end > pos)
{
psl->a[end] = psl->a[end - 1];//表中的数据依次按从后向前的方式向后挪动
end–;
}
psl->a[pos] = x;
psl->size++; //插入完后表中数据个数 +1
}


## 删除数据


### 头删


头删只需将表中从第二个数据开始到最后一个数据都向前挪动一个位置,将第一个数据覆盖即可,然后整个表的数据个数减少一个



void SeqListPopFront(SLT* psl)
{
assert(psl);
int begin = 1;
for (begin = 1; begin < psl->size; begin++)
{
psl->a[begin - 1] = psl->a[begin];//表中的数据依次按从前向后的方式向前挪动
}
psl->size–; //删除后数据-1
}


### 尾删


实现起来非常简单,直接减掉最后一个数据即可(若要显示表的内容,则减去一个数据后,显示前size-1个数据即可)



void SeqListPopBack(SLT* ps1)
{
assert(ps1);
ps1->size–;
}


### 特定位置删除


给定一个表中下标为 pos 的特定位置,删除该位置的数据只需将从将从该位置后的一个数据到表末的所有数据向前挪动一个位置,即将该pos处位置的数据覆盖即可



void SeqListErase(SLT* psl, size_t pos)
{
assert(psl);
assert(pos < psl->size&& pos >= 0); //保证下标pos的合理性
int begin = pos;
while (begin < psl->size)
{
psl->a[begin] = psl->a[begin + 1];//数据依次按从前向后的方式向前挪动
begin++;
}
psl->size–; //删除后数据-1
}


## 顺序表查找


即查找顺序表中特定位置 (下标为pos) 的数据,实现起来比较容易,将整个表遍历一遍即可





![img](https://img-blog.csdnimg.cn/img_convert/356631351c475c951541a1e323f3d8f5.png)
![img](https://img-blog.csdnimg.cn/img_convert/ba080755b2eb7037c4083a31334fc1c2.png)
![img](https://img-blog.csdnimg.cn/img_convert/32f278e8bb4c6f7e8c0f7bab47b447ba.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值