目录
1.线性表的概念
线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。
数组形式
链表形式
2.顺序表的实现
2.1静态顺序表的创建
静态顺序表采用数组形式,数组中的元素存放是相连的(中间没有空的空间,是紧密连接的),静态顺序表需要一开始就要分配其所要开辟空间的大小,并且其空间大小不可更改。
代码实现形式
在代码中可以通过更改MAX_SIZE 和 SQDataType的数据类型,来更改数组开辟空间的大小。
2.2静态顺序表的局限性
静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组导致N定大 了,空间开多了浪费,开少了不够用。所以现实中基本都是使用动态顺序表,根据需要动态 的分配空间大小,所以下面我们实现动态顺序表。
3.动态顺序表的实现
3.1动态顺序表的创建
动态顺序表也是用数组形式,但在开辟空间是采用动态开辟的方式,可以使用mealloc,或者realloc动态函数开辟空间。当存储数据达到开辟空间大小极限时,进行动态开辟,即再分配一块空间用来存储数据。
代码实现形式
3.1.1插入数据的实现
结构体初始化后,对于初始化后的空间进行存放数据.
思考:存放数据第一步考虑什么?
|
|
|
|
|
|
首先考虑存放数据时,要存放的空间是不是已经满了,如果满了要进行扩容。
下图为扩容函数的实现:
第二步:将所要存储的数据存储到空间中,存储位置可以任意选择,可以为首端插入,尾端插入,任意位置插入,在这对任意插入进行示例。
下图为任意位置插入函数的实现:
3.1.2删除数据的实现
删除数据可以实现首段删除,尾端删除,任意位置删除。本文在此对首端删除进行示例。
下图为首端删除函数代码
3.1.3更改数据的实现
对于顺序表,还要实现的功能为对已经空间所存数据进行更改。
下图为更改数据函数代码
3.1.4顺序表空间的销毁
使用realloc,mealloc等动态函数开辟的空间在不使用时需要进行销毁,以防止内存泄漏。
下图为销毁函数代码