冯毅《数据结》ch3-2.ppt

冯毅《数据结》ch3-2

栈的逻辑结构 栈的定义和特点 定义:限定仅在表尾进行插入或删除操作的线性表,表尾—栈顶(top),表头—栈底(bottom),不含元素的空表称空栈 特点:先进后出(FILO)或后进先出(LIFO) 寻找一条从入口到出口的通路。 在许多情况下,简单的队列结构是不够的,需要使用某些优先规则来完善FIFO机制 设定当前位置的初值为入口位置; do { 若当前位置可通: 则{ 将当前位置插入栈顶; 若该位置是出口位置,则算法结束; 否则切换当前位置的下邻方块为新的当前位置; } 否则,当前位置不通: 则{ 若栈不空 { 若栈顶位置尚有其他方向未被探索: 设定新的当前位置为栈顶的下一相邻块,继续试探 若栈顶位置的四周均不可通: { 删去栈顶位置; // 从路径中删去该通道块 若栈不空,则重新测试新的栈顶位置, 直至找到一个可通的相邻块或出栈至栈空; } } 若栈空:则表明迷宫没有通路 }while (栈不空); 栈的应用——迷宫问题算法思路 队列 (Queue) 队列的逻辑结构 队列的存储结构 队列的应用 队列的逻辑结构 队列的定义及特点 定义:队列是限定只能在表的一端进行插入,在表的另一端进行删除的线性表 队尾(rear)——允许插入的一端 队头(front)——允许删除的一端 队列特点:先进先出(FIFO) a1 a2 a3…………………….an 入队 出队 front rear 队列Q=(a1,a2,……,an) 队列的运算:置空队 取队头 判空队 进队 退队 ADT Queue { 数据对象: D={ ai | ai ∈ElemSet, i=1,2,...,n, n≥0 } 数据关系: R1={ ai-1, ai | ai-1, ai∈D, i=2,...,n } 约定a1 为队头,an为队尾 基本操作: } ADT Queue 队列的抽象数据类型定义 基本操作: InitQueue(Q) 操作结果:构造一个空队列 Q DestroyQueue(Q) 初始条件:队列 Q 已存在 操作结果:队列 Q 被销毁 QueueEmpty(Q) 初始条件:队列 Q 已存在 操作结果:空队列,返回 TRUE;否则 FALSE QueueLength(Q) 初始条件:队列 Q 已存在 操作结果:返回 Q 的元素个数,即队列的长度 ClearQueue (Q) 初始条件:队列 Q 已存在 操作结果:将 Q 清为空队列 队列的抽象数据类型定义 GetHead(Q, e) 初始条件:队列 Q 已存在且非空 操作结果:用 e 返回 Q 的队头元素 EnQueue(Q, e) 初始条件:队列 Q 已存在 操作结果:插入元素 e 为Q的新的队尾元素 DeQueue(Q, e) 初始条件:队列Q 已存在且非空 操作结果:删除 Q 的队头元素,并用 e 返回其值 QueueTravers(Q, visit()) 初始条件:队列 Q 已存在且非空 操作结果:依次对Q 的每个元素调用函数visit() 队列的抽象数据类型定义 基本操作: a1 a2 a3…………………….an 端1 端2 入队 出队 出队 入队 双端队列与超队列 a1 a2 a3…………………….an 端1 端2 入队 出队 入队 双端队列 超队列 队列的存储结构 链队列 顺序队列 … a1 a2 an ^ ai … a1 a2 … ai … an 队头front 队尾rear 出队 入队 Q.front 队头 队尾 设队首、队尾指针front和rear, front指向头结点,rear指向队尾 结点定义: typedef st

文档评论(0)

1亿VIP精品文档

相关文档