有顺序且有限的相同类型的数据元素的集合
eg:星座列表
星座通常以白羊座开始 双鱼座结尾 星座都有前驱后继 一共有十二个
线性表是具有相同类型的n个数据元素的有限序列
a1 a2 ·······an
ai 是表项 n是表长度
a0为线性表第一个元素 只有后继
an是最后一个 只有前驱
线性表可以逐项访问 顺序存取
创建线性表
销毁线性表
清空线性表
将元素插入线性表
将元素从线性表中删除
获取线性表中某个位置的元素
获取线性表的长度
#ifndef _WBM_LIST_H_ #define _WBM_LIST_H_ typedef void List; typedef void ListNode; //创建并且返回一个空的线性表 List* List_Create(); //销毁一个线性表list void List_Destroy(List* list); //将一个线性表list中的所有元素清空, 线性表回到创建时的初始状态 void List_Clear(List* list); //返回一个线性表list中的所有元素个数 int List_Length(List* list); //向一个线性表list的pos位置处插入新元素node int List_Insert(List* list, ListNode* node, int pos); //获取一个线性表list的pos位置处的元素 ListNode* List_Get(List* list, int pos); //删除一个线性表list的pos位置处的元素 返回值为被删除的元素,NULL表示删除失败 ListNode* List_Delete(List* list, int pos); #endif
即一段地址连续 的 存储单元依次存储线性表的数据元素
判断线性表是否合法
判断插入位置是否合法
把最后一个元素到插入位置的元素后移一个位置
将新元素插入
线性表长度加1
判断线性表是否合法
判断位置是否合法
直接通过数组下标的方式获取元素
判断线性表是否合法
判断删除位置是否合法
将元素取出
将删除位置后的元素分别向前移动一个位置
线性表长度减1
优点:无需为线性表的逻辑关系增加额外的空间
可快速获取表中合法位置的元素
缺点:插入删除需要移动大量的元素
线性表长度变化较大时难以确定存储空间的容量
每个数据元素除了存储本身的数据之外 还要存储指示其直接后继的信息。
包含指向第一个数据元素的指针和自身信息
包含指向下一个数据元素的指针和数据元素的信息
最后一个数据节点 其下一个元素指针为空 无后继
简单好用 但不能实现数据域和指针域的分离
用数据域包含指针域 缺点是要计算偏移量
用数据域包含指针域 不用计算偏移量
无需一次性制定链表的容量‘ 插入删除元素操作无需移动数据元素
数据元素必须保存后继元素的位置信息
获取指定数据的元素操作需要顺序访问之前的元素