1.线性表:
1. 1本质
list是零个/对个数据元素的集合。数据元素有顺序、有限、同类型。
定义:线性表是具有相同类型的 n(>= 0)个数据元素的有限序列
(a1, a2, …, an) ai 是表项,n 是表长度
1.2 相关操作
线性表的一些常用操作:
创建线性表:List* List_Create();
销毁线性表:void List_Destroy(List* list);
清空线性表:void List_Clear(List* list);
将元素插入线性表:int List_Insert(List* list, ListNode* node, int pos);
将元素从线性表中删除:ListNode* List_Delete(List* list, int pos);
获取线性表中某个位置的元素:ListNode* List_Get(List* list, int pos);
获取线性表的长度:int List_Length(List* list);
1.3 线性表顺序存储结构
定义:线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
在C语言中可以用一维数组来实现顺序存储结构:
存储空间的起始位置:数组node
线性表的最大容量:数组长度MAXSIZE
线性表的当前长度:length
获取元素操作:
判断线性表是否合法
判断位置是否合法
直接通过数组下标的方式获取元素
插入元素操作:插入元素算法
判断线性表是否合法
判断插入位置是否合法
把最后一个元素到插入位置的元素后移一个位置
将新元素插入
线性表长度加1
删除元素操作:删除元素算法
判断线性表是否合法
判断删除位置是否合法
将元素取出
将删除位置后的元素分别向前移动一个位置
线性表长度减1
优点:无需为线性表中的逻辑关系增加额外的空间
可以快速的获取表中合法位置的元素
缺点:插入和删除操作需要移动大量元素
当线性表长度变化较大时难以确定存储空间的容量
1.4线性表的链式存储结构
定义:为了表示每个数据元素与其直接后继元素之间的逻辑关系,每个元素除了存储本身的信息外,还需要存储指示其直接后继的信息。
链式存储逻辑结构:n个结点链接成一个链式线性表的结构叫做链表,当每个结点中只包含一个指针域时,叫做单链表。
链表的基本概念:表头结点、数据结点、尾结点
链式存储结构:在C语言中可以用结构体来定义链表中的指针域,链表中的表头结点也可以用结构体实现
获取第pos个元素操作
插入元素操作
删除元素操作