'''
1 .顺序表的概念及结构
在了解顺序表的概念前我们先来了解一个概念——线性表。
什么是线性表呢?线性表是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...通俗一点,线性表在逻辑中是像线一样连续的,但它在物理结构上不一定连续,线性表在物理上存储时,通常以数组和链式结构的形式存储。
我们要讲的顺序表就是线性表的一种,它的底层是数组,所以顺序表的特点就是在逻辑上和物理结构上都连续。
'''
'''
2.顺序表的分类
1.顺序表和数组的区别在于,顺序表是对数组的分装,顺序表实现了常用的增删查改等接口。
2.顺序表分为两种,一种是静态顺序表,另一种是动态顺序表。
静态顺序表的结构(如图所示)
静态顺序表使用的是定长数组结构 ,它有一个很明显的缺点,空间给少了不够用,给多了容易造成浪费,所以在现实生活中它的使用场景比较小。
我们的重点是了解动态数组为底层的动态顺序表。
动态顺序表
以上就是动态顺序表的结构,首先是一个存放元素的动态数组a,其次是记录有效元素个数的size,再者就是用来记录总共开辟了多少内存空间的capacity 。那么我们如何用代码来实现顺序表的增删查改等内容呢?
'''
'''
3.动态顺序表的增删查改
首先,我们要来实现这么些个功能的话,最好让他们达到高内聚、低耦合的条件,简单的说,就是我们写的这些接口(函数)要有独立的功能,且相互之间要有联系。所以,我们用两个.c源文件和一个.h头文件来实现我们的动态顺序表。
我们的.h头文件是来进行我们的结构体和函数的声明的。
而我们的.c源文件是来进行接口的实现和测试接口的。
我们的.h头文件的内容就如下所示:
在.h头文件中我们要注意几点:
1.我们的库函数的头文件最好写在我们的头文件中,因为我们的两个.c源文件到时候是需要调用SqList.h这个头文件的。
2.我们最好给我们的顺序表重命名,这样的好处是使我们在写的过程中可以节省时间。
接下来是我们接口实现的SqList.c源文件。
这些接口的实现都相对轻松,我们最后再写一个.c源文件来测试就可以了。
这里要注意,我们传的是是顺序表的地址,因为我们是想改变顺序表,而如果我们不传地址的话,就无法改变顺序表本身,因为形参是实参的一份临时拷贝,,所以不会改变原来的顺序表。这种时候我们来传地址就可以修改顺序表了。
我们最后再来看一下运行结果:
'''