ADT 线性表 List
Data
线性表数据对象的集合为{a1,a2,...,aN},每个元素的类型均为DataType。其中除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素aN外,每一个元素有且仅有一个直接后继元素。
Operation
InitList(*L) 初始化操作
ListEmpty(L) 若线性表为空,返回true,否则返回false
ClearList(*L) 将线性表清空
GetElem(L, i, *e) 将线性表L中的第i个元素值返回给e
LocateElem(L, e) 在线性表L中查找与给定值e相等的元素,如果查找成功,返回该元素在表中序号表示成功;否则返回0表示失败
ListInsert(*L, i, e) 在线性表L中的第i个位置插入新元素e
ListLength(L) 返回线性表L的元素个数
ADT 栈 stack
Data
同线性表。元素具有相同的类型,相邻元素有前驱后后继关系
Operation
InitStack(*S) 初始化操作,建立一个空栈S
DestroyStack(*S) 若栈存在,则销毁它
ClearStack(*S) 将栈清空
StackEmpty(S) 若栈为空,返回true,否则返回false
GetTop(*S, *e) 若栈存在且非空,用e返回S的栈顶元素
Push(S*S,e) 若栈S存在,插入新元素e到栈S中并成为栈顶元素
Pop(*S, *e) 删除栈S中栈顶元素,并用e返回其值
StackLength(S) 返回栈S的元素个数
ADT 队列 Queue
Data
同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系
Operation
InitQueue(*Q) 初始化操作,简历一个空队列Q
DestroyQueue(*Q) 若队列Q存在,则销毁它
ClearQueue(*Q) 将队列Q清空
QueueEmpty(*Q) 若队列为空,返回 true, 否则返回 false
GetHead(Q, *e) 若队列存在且非空, 用e返回队列Q的队头元素
EnQueue(*Q, e) 若队列Q存在,插入新元素e到队列Q中并成为队尾元素
DeQueue(*Q, *e) 删除队列Q中的队头元素,并用e返回其值
QueueLength(Q) 返回队列Q的元素个数
ADT 串 string
Data
串中元素仅由一个字符组成,相邻元素具有前驱和后继关系
Operation
StrAssign(T, *chars) 生成一个其值等于字符串常量的chars的串T
StrCopy(T, S) 传S存在,由串S复制得到串T
ClearString(S) 串S存在,将串清空
StringEmpty(S) 若串S存在,将串清空
StrLength(S) 返回串S的元素个数,即串的长度
StrCompare(S, T) 若S>T, 返回值>0, 若S=T, 返回0, 若S<T, 返回值<0
Concat(T, S1, S2) 用T返回由S1和S2联结而成的新串
SubString(Sub, S, pos, len) 用Sub返回串S的第pos个字符起长度为len的子串
Index(S, T, pos) 若主串S中存在和串T值相同的子串, 则返回它在主串S中第pos个字符之后第一次出现的位置,否则返回0
Replace(S, T, V) 串S、T和V存在, T是非空串。用V替换主串S中出现的所有与T相等的不重叠的子串
StrInsert(S, pos, T) 在串S的第pos个字符之前插入串T
StrDelete(S, pos, len) 从串S中删除第pos个字符起长度为len的子串
ADT 树 tree
Data
树是由一个根节点和若干棵子树构成。树中节点具有相同数据类型及层次关系
Operation
InitTree(*T) 构造空树T
DestroyTree(*T) 销毁树T
CreateTree(*T, definition) 按definition中给出树的定义来构造树
ClearTree(*T) 若树T存在, 则将树T清为空树
TreeEmpty(T) 若T为空树,返回true,否则返回false
TreeDepth(T) 返回T的深度
Root(T) 返回T的根节点
Value(T, cur_e) cure_e是树T中一个结点,返回此节点的值
Assign(T, cur_e, value) 给树T的结点cur_e赋值为value
Parent(T, cur_e) 若cur_e是树T的非根结点,则返回它的双亲,否则返回空
LeftChild(T, cur_e) 若cur_e是树T的非叶结点,则返回它的最左孩子,否则返回空
RightSibling(T, cur_e) 若cur_e有右兄弟,则返回它的右兄弟,否则返回空
InsertChild(*T, *p, i, c) 其中p指向树T的某个节点, i为所指结点p的度加上1,非空树c与T不相交,操作结果为插入c为树T中p指结点的第i棵子树
DeleteChild(*T, *p, i) 其中p指向树T的某个结点,i为所指结点p的度,操作结果为删除T中p所指结点的第i棵子树
ADT 图 Graph
Data
顶点的有穷非空集合和边的集合
Operation
CreateGraph(*G, V, VR) 按照顶点集v和边弧集VR的定义构造图G
DestroyGraph(*G) 图G存在则销毁
LocateVex(G, u) 若图G中存在顶点u, 则返回图中的位置
GetVex(G, v) 返回图G中顶点v的值
PutVex(G, v, value) 将图G中顶点v赋值value
FirstAdjVex(G, *v) 返回顶点v的一个邻接顶点, 若顶点在G中无邻接顶点返回 空
NextAdjVex(G, v, *w) 返回顶点v相对于顶点w的下一个邻接顶点,若w是v的最后一个邻接点则返回 空
InsertVex(*G, v) 在图G中增添新顶点v
DeleteVex(*G, v) 删除图G中顶点v及相关的弧
InsertArc(*G, v, w) 在图G中增添弧<v, w> 若G是无向图,还需要增添对称弧<w, v>
DeleteArc(*G, v, w) 在图G中删除弧<v, w> 若G是无向图,还需要删除对称弧<w, v>
DFSTraverse(G) 对图G中进行深度优先遍历,在遍历过程对每个顶点调用
HFSTraverse(G) 对图G中进行广度优先遍历,在遍历过程对每个顶点调用
- 已知:先序 ABCDEF 中序 CBAEDF 求后序
- 已知:中序 ABCDEF 后序 BDCAFE 求先序
思路
先序和后序确定根结点,找到根结点后在中序找到左右子树,然后重新查找根结点