线性表
线性表的定义:由0个或者多个元素数据元素组成的有限序列
1.先来后到
2. 第一个是前驱,最后一个是后继,只有一个前驱和一个后继
3. 处理元素有限
抽象数据类型:整型,浮点型,字符型,结构类型
线性表相关操作:创建,删除,插入
顺序存储结构:依次存储元素
插入算法的思考
1.插入位置不合理,异常
2.线性表长度大于数组长度,异常或增容
3.从最后一个位置遍历到i,分别向后移动一个位置
4.插入元素到i
5.线性表长度+1
删除算法思考
1.删除位置不合理,异常
2.取出删除元素
3.删除元素开始遍历到最后,分别往前移一个位置
4.表长-1
分析插入和删除的时间复杂度
1.最好:在最后一位发生,O(1)
2.最坏:在第一位发生,要移动所有元素向前或者向后,O(n)
3.取平均值,还是O(n)
4.比较适合元素稳定,只需要存取元素
链式存储结构特点:除了存储本身信息,还需要存储一个指示其后继元素的存储地址的信息(指针)
单链表:每个结点只包含一个指针域,有头指针,最后一个为空。
单链表的示意图
头节点和头指针
头节点的数据域不存储任何的信息,通常存链表的长度,不是必要元素。
头指针在头节点之前,指向头节点,作为指向第一个结点的指针,头指针由标识作用,常用头指针冠以链表名字,而且是必要元素,不可为空。
指针:p指向第i个元素,p->next是指针,p->data是数据元素。如果p=ai, p->next=ai+1的指针,p->next->data=ai+1
单链表的读取元素i
算法思路
1.声明一个结点p