#线性链表
##基础概念
- 顺序存储:
用一组连续的内存单元存放数据元素,用元素相对的存储位置表示元素之间的结构关系;
- 链式存储:用任意一组存储单元存储数据元素,对每个数据元素除了保存自身信息外,还保存相关元素的存储位置。
##单链表初始化
结点中只含一个指针域的链表叫线性链表,也叫单链表
1 | typedef struct LNode { |
- (*p)表示L所指向的结点
- (*p).datap->data表示p指向结点的数据域
- (*p).nextp->next表示p指向结点的指针域
- 生成新结点:p=(LinkList )malloc(sizeof(LNode));
- 系统回收p结点:free(p)
##插入
###算法思想:
- 寻找第i-1个元素结点(顺指针向后查找,直到p指向第i-1个元素或p为空)
- 分配新结点
- 插入新结点
1 | Status ListInsert_L(LinkList &L, int i, ElemType e){ |
##删除
###算法思想:
- 寻找第i-1个结点
(顺指针向后查找,直到p指向第i-1个元素或p->next为空) - 删除结点(修改其后继指针)
- 回收(释放)结点空间
1 | 删除操作算法: |
##逆置线性链表
###算法思想:
- 标志后继结点为空)
- 修改指针(将*p插入在头结点之后)
- 重置结点*p(p重新指向原表中后继)
1 | void inverse(LinkList &L) { |