线性表
重点:
- 线性表的逻辑结构
- 线性表的顺序存储结构
- 线性表的链式存储结构
- 一元多项式的表示及相加
定义:
线性表n(n>=0)的同质元素的有限数列,每个元素有唯一的前驱和后继。首元素只有后继,尾元素只有前驱,n为0时是空表,n叫做线性表的长度。
线性表的基本操作
- 初始化 InitList(&L)
- 销毁 DestroyList(&L)
- 清空 ClearList(&L)
- 判断空表 ListEmpty(L)
- 求长度 ListLength(L)
- 取i值 GetElem(L,i,&e)
- 定位 LocateElem(L,e,compare())
- 求前驱 PriorElem(L,cur_e,&pre_e)
- 求后继 NextElem(L,cur_e,&next_e)
- 插入 ListInsert(&L,i,e)
- 删除 ListDelete(&L,i,&e)
- 遍历 ListTraverse(L,visit())
- 复制 Copy(L,C) (L复制到C)
- 合并 Merge(A,B,C) (把A,B合并到C中)
顺序存储结构
所有数据类型相同,占用空间大小相同。查找数据方便,常用数组表示顺序存储结构。
数组特点(用数组表示的原因)
- 数组元素间连续
- 数组所有元素数据类型相同
由于线行表的长度可变,所需的最大存储空间随问题的不同而不同。下面是线性表的动态分配顺序存储结构
顺序表的插入操作
顺序表的删除操作
- 表长为n的顺序存储的线性表,当在任何位置上插入和删除相等时,插入一个元素所需移动元素平均个数为n/2,删除一个元素所需移动的平均个数为(n-1)/2.
顺序存储结构特点
- 顺序存储的线性表可以随机存取其中任意元素
- 数据元素最大个数需预先确定
- 需要预先确定最大个数
- 插入和删除效率低
- 存储空间不变扩充
链式存储结构
- 存储数据元素的值
- 存储各数据元素之间的逻辑顺序
- 将结点分为两部分:数据域(存储数据元素的值),指针域(下一个存储结点的位置)
- 只含一个指针域的链表称为单向链表
结点的描述与实现
- 带指针的结构体类型的描述
结点的实现
malloc(),realloc(),sizeof(),free()
动态分配
s=(LNode*)malloc(sizeof(LNode))
动态分配
free(s)
结点赋值
常见指针操作
q=p;
q=p->next;
p=p->next;
q->next=p;
q->next=p->next;
单链表的初始化
单链表插入
- 后插入
- 前插入
建立非空链表
- 头插法
- 尾插入法
两段论
- 对象->next=前驱
- 前去->next=对象
本章未完,如果有错误欢迎大家指正。