顺序表的创建

本期我们主要讨论动态顺序表

这个内容可以分为三个部分

1.创建头文件进行函数声明

2.创建源文件进行函数定义

3.创建主文件进行测试

我们先来看看头文件里的函数声明:


函数声明:

头文件中包括<stdlib.h>库函数用于进行动态内存管理,assert用于警告退出。

SLDataType为顺序表中存储的元素类型,typedef int,即将int类型取个名字叫做SLDataType。与宏相反,例如define int SLDataType为将int转为SLDataType,而typedef是将SLDataType转为int。

SeqList为我们创建的顺序表,三个参数分别为

1.存储的元素指针类型(即首地址),相当于创建这种元素类型的数组,后面我们可以通过动态内存为这个地址开始分配空间。

2.现在在数组中存放的元素个数。

3.数组的空间容量,即可以存储多少个这种类型的元素。

接下来几个函数用途分别为初始化,销毁,输出,扩容,尾插,尾删除,头插,头删除操作。

函数定义:

函数定义的源文件中我们要包含声明的头文件,之后在开始对函数进行定义。

初始化函数:

传入顺序表的地址。

#注意:必须传入地址,传入的如果是顺序表本身的话只是对原顺序表的一份拷贝,无法队员顺序表进行修改。

将顺序表的数组地址设置为空。

将顺序表的元素个数设置为0。

将顺序表的空间大小设置为0.

销毁函数:

因为是动态顺序表,使用的空间是向操作系统借的,所以用完之后需要释放。

如果数组首地址不为空,则释放数组。

之后:

将顺序表的数组地址设置为空。

将顺序表的元素个数设置为0。

将顺序表的空间大小设置为0.

这一步其实可以直接用初始化函数完成。

输出函数:

按照正常的方式输出数组即可。

空间分配函数(重点):

如果已存放的元素个数等于数组可存放元素个数,则需要再分配空间。

此时有两种可能:

1.如果数组本身没有空间,则需要给他一个空间。

2.如果数组本身有空间,只需要将数组空间翻倍即可。

我们使用newcapacity来记录新空间的大小,并创建一个指针来记录开辟空间的首地址。

如果成功开辟空间,则将新空间传给顺序表,顺序表的数组地址改为新空间的地址,可存放元素个数改为newcapacity。

如果没有成功开辟,则产生警告,退出程序。

注意:过了两天博主发现这里写了两个bug,1是newcapacity,如果原空间为0,那么初始值要设为sizeof(SLDataType)。2是下面的ps->capacity,应该改为newcapacity/sizeof(SLDataType),capacity存的是可以存放的变量个数而不是可以存放的空间大小。

尾插函数:

先使用空间分配函数确保顺序表具有充足的空间,然后将顺序表数组的最后一位改为插入的值,粗放的元素个数size++。

头插函数:

第一步还是要检查数组空间是否足够。

找到顺序表数组最后一个位置

从size位置开始(数组元素最后一位为size-1,在头部插入新的值也就是所有元素后移一位)。

每一位都修改为前一位直到i=0时退出,i此时为第一位,即:将第一位修改为新插入的数x,然后将

存放的元素个数+1即可。

尾删函数:

将最后一位的值修改为-1然后存放的元素个数-1即可。

头删函数:

元素个数减去一,从第一位开始每一位都修改为后一位即可。

插入函数:

这个函数比头插尾插更高级,找到固定位置插入一个数即可。

我这里是pos为第几位,在那一位放上插入数。

查找函数:

用途为找到某个固定的数第一次出现的下标,没出现则返回-1.

汇总:

在我们创建的源文件中包含上我们刚刚定义函数的文件,然后进行运行,设计的符合预想,结束。

#看在博主这么辛苦写文章写代码的份上留个免费的赞吧,谢谢!

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值