严蔚敏视频 笔记06
其它形式的链表
1.双向链表
typedef struct DuLNode {
ElemType data; // 数据域
struct DuLNode *prior; // 指向前驱的指针域
struct DuLNode *next; // 指向后继的指针域
} DuLNode, *DuLinkList;
空表头结点前驱和后继指向其自身
2.循环链表
最后一个结点的指针又指回头结点
2.4 一元多项式表示
用线性表来表示P=(p0,p1,…,pn)
当有很多0时不适合用来表示
pi是指数为ei的项的非零系数
((p1,e1),(p2,e2),…,(pm,em))
ADT Polynomial {
数据对象:D={ai|ai∈TermSet,i=1,2…,m m>=0
TermSet中的每个元素包含一个表示系数的实数和表示指数的整数}
数据关系:R1={<ai-1,ai>|ai-1,ai∈D,且ai-1中的指数值<ai中的指数值,i=2,…,n}
基本操作:
……
}
实现:
typedef struct { // 项的表示,多项式的项
// 作为LinkList的数据元素
float coef; // 系数
int expn; // 指数
} term,ElemType;
// 两个类型名:term用于本ADT,ElemType为LinkList的
数据对象名
typedef LinkList polynomial;
// 用带表头结点的有序链表表示多项式
int cmp(term a,term b);
判定函数
void CreatPolyn(polynomial &P,int m);
// 输入m项的系数和指数,建立表示一元多项式的有序链表P
本章小结:
1.了解逻辑结构特性 线性关系
两种不同映象方法
顺序表 链表
2.熟练掌握两类结构的描述方法及各种基本操作实现
3.从时间和空间复杂度角度综合比较不同特点及适用场合
第三章 栈和队列
3.1 栈的类型定义
ADT Stack {
数据对象:D={ai|ai∈ElemSet,i=1,2…,n n>=0}
数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…,n
约定an端为栈顶,ai端为栈底}
基本操作:
InitStack(&S)
DestroyStack(&s)
StackEmpty(S)
StackLength(S)
GetTop(S,&e)
ClearStack(&S)
Push(&S,e)
Pop(&S,&e)
}
特殊线性表:
栈
插入 只能在ListLength(L)+1位置
删除 只能在ListLength(L)位置
队列
插入 只能在ListLength(L)+1位置
删除 只能在1位置
3.2栈的应用举例
数制转换
括号匹配的检验
行编辑器程序问题
迷宫求解
表达式求值
实现递归