在讲顺序表之前,要先对数据结构有所了解,数据结构是指计算机存储和组织数据的形式,其中包括了顺序表、链表、二叉树等。
接下来对顺序表进行讲解:
一.顺序表的特点:
1.顺序表的低层逻辑是数组,即是基于数组来实现的。
2.顺序表是线性表(具有相同特性的数据结构的集合,特性包括物理结构和逻辑特性)的一种。
3.线性表的物理结构:不一定连续,逻辑结构:一定连续。顺序表的物理结构:连续,逻辑结构:连续。所以得出第二点特点。
二.顺序表的分类:
1.静态顺序表(基于定长数组)
基本结构:struct SeqList
{
int arr[10];//定长数组
int size;//当前有效元素个数
} ;
2.动态顺序表(基于不定长数组)
基本结构:struct SeqList
{
int*arr;//指针
int size;//当前有效元素个数
int capacity;//空间大小
};
和动态数组相比,静态数组的长度固定,灵活性差,所以在用顺序表时往往用动态顺序表。接下来对动态顺序表进行代码演示。
三.代码演示:(实现方式有很多种,演示的并非最优代码)
在写工程时分为三个文件:SeqList.h SeqList.c test.c
test.c作为测试文件,用来测试实现顺序表各种功能的函数的功能是否正常
SeqList.h中包含了工程用到的各种头文件和对各种功能函数的声明
SeqList.c中包含了各种实现顺序表功能的函数的定义
1.SeqList.h文件
2.SeqList.c文件
①初始化和销毁(因为数组空间是用realloc动态开辟的,要及时释放,释放后要及时置为空,避免野指针)
②检测顺序表空间(在向顺序表中插入数据之前要先判断顺序表的空间是否足够,不够的话要为其扩容)
③打印顺序表(写一个循环,从头遍历数组,并把数据打印出来即可)
④头插、尾插
尾差要先判断空间是否足够,若足够直接在数组后面添加一个数组即可。
头差也要先判断空间是否足够,但要移动数据,再在头插入一个数据。如下图:要从后往前移,不能从前往后移,否则会造成数据覆盖。
⑤头删,尾删
尾删很简单只要将size--即可
头删要移动数据,再size--。如图:
这里要从前往后移动,否则也会造成数据覆盖。
⑥指定位置之前插入
与头插逻辑类似,只是把头改成了指定位置之前(其也可以完成头插功能),需要从指定位置从后往前移动数据,再插入数据。
⑦指定位置删除
从前往后移动数据,再size--即可:
⑧打印顺序表
按顺序把数据打印出来即可。
3.test.c测试文件
可以按自己的需要对所写函数的功能进行测试
上述就是我要说的顺序表的所有内容,顺序表还可以添加其他的功能,可根据自己的需求来尝试添加,文章有什么不足,欢迎大家指出。