数据结构【顺序表】
目录
线性表
顺序表
概念与结构
分类
静态顺序表
动态顺序表
动态顺序表的实现
在头文件中创建结构体
初始化顺序表
销毁顺序表(可以留到后面再看)
尾插数据
申请空间
打印顺序表数据
头插数据
尾删除数据
头删除数据
在指定位置插入数据
在指定位置删除数据
查询数据
顺序表算法题
移除元素
删除有序数组中的重复项
合并两个有序数组
代码
线性表
++++1
线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使⽤的 数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串...
线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的,线性 表在物理上存储时,通常以数组和链式结构的形式存储。
线性表是具有相同特性的集合,就比如现实生活中的,水果有苹果,香蕉,西瓜等等....,这些都是水果类型的。线性表:顺序表、链表、栈、队列、字符串等等...
顺序表
概念与结构
概念:顺序表是⽤⼀段物理地址连续的存储单元依次存储数据元素的线性结构,⼀般情况下采⽤数组 存储。
逻辑结构:就像一家早餐店早上有很多人排队,排成一条线,这就是逻辑结构,都是线性的
顺序表也是数组,顺序表在物理结构不一定连续,在逻辑结构是连续的,
顺序表和数组的区别? 顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝。
下面这张图,苍蝇馆子就像数组,米其林餐厅就像顺序表,一个普普通通的炒西蓝花,在米其林餐厅西蓝花+料汁+小饰品+摆盘就变成了绿野仙踪,
顺序表也是一样在数组的基础上加了(增加数据,删除数据,修改数据,查找数据)就变成了顺序表
分类
静态顺序表
概念:使⽤定⻓数组存储元素
静态数组只需要,定长数组,有效数据个数
静态顺序表缺陷:空间给少了不够⽤,给多了造成空间浪费
静态顺序表不推荐用,如果要存放用户数据的话,当数据存满了,剩下的数据就会丢失。
动态顺序表
动态顺序表需要有效个数,空间的容量,a也可以说就是个数组
动态顺序表的实现
代码在文章最后
我们需要创建一个seqlist.h头文件,seqlist.c文件存放函数,还有一个.c的测试文件。
在头文件中创建结构体
把int 重命名为 data,这样方便修改类型,就不用一个一个修改了
初始化顺序表
我们要在头文件声明一下,这样的话我们可以方便查看有什么函数,就像我们看一本书,书有目录方便我们阅读。
初始化我们需要把arr赋值为NULL,有效个数和空间容量赋值为0就好了。
如果我们现在申请空间,会导致空间满了我们没法调整。
我们只需要添加数据的数据(申请/调整)空间就好了。
我们可以发现初始化成功了
销毁顺序表(可以留到后面再看)
这里我先讲顺序表销毁,也可以先往后看,最后再来看销毁。
我们申请空间用完了需要还,不然存在空间泄露。
if判断结构体里arr的有没有数据,有数据就free释放空间,有效个数和空间容量赋值为0。