《数据结构》栈和队列B.pptVIP

  • 6
  • 0
  • 约5.62千字
  • 约 25页
  • 2021-12-03 发布于上海
  • 举报
第三章 栈和队列 3.1 栈(Stack) 定 义 链队列示意图 顺序队示意图 问:什么叫“假溢出” ?如何解决? 答:在顺序队中,当尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫“假溢出”。 例1 :数组Q[n]用来表示一个循环队列,f 为当前队列头元素的前一位置,r 为队尾元素的位置。假定队列中元素的个数小于n,计算队列中元素的公式为: (A) r-f (B)(n+f-r)% n (C)n+r-f (D) (n+r-f)% n 问:为什么要设计队列?它有什么独特用途? 离散事件的模拟(模拟事件发生的先后顺序); 操作系统中多道作业的处理(一个CPU执行多个作业); 3. 简化程序设计。 小结 队列:限定从一端删除和另一端插入的线性表 队头front、队尾rear、空队 顺序队,链式队 操作/运算 初始化、入队、出队、判队空 本章小结 线性表、栈与队的异同点 相同点:逻辑结构相同,都是线性的;都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表(只是对插入、删除运算加以限制)。 不同点: ① 运算规则不同,线性表为随机存取,而栈是只允许在一端进行插入和删除运算,因而是后进先出表LIFO;队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表FIFO。 ② 用途不同,线性表比较通用;堆栈用于函数调用、递归和简化设计等;队列用于离散事件模拟、多道作业处理和简化设计等。 第三章(栈和队)问题讨论 上堂课遗留问题讨论 * 3.4 队列(Queue) 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 实现方式 递归的应用 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式 例4 汉诺仪( Hanoi)塔 传说在创世纪时,在一个叫Brahma的寺庙里,有三个柱子,其中一柱上有64个盘子从小到大依次叠放,僧侣的工作是将这64个盘子从一根柱子移到另一个柱子上。 移动时的规则: 每次只能移动一个盘子; 只能小盘子在大盘子上面; 可以使用任一柱子。 当工作做完之后,就标志着世界末日到来。 分析: 设三根柱子分别为 x,y, z , 盘子在 x 柱上,要移到 z 柱上。 1、当 n=1 时,盘子直接从 x 柱移到 z 柱上; 2、当 n1 时, 则①设法将 前 n –1 个盘子 借助 z ,从 x 移到 y 柱上,把 盘子 n 从 x 移到 z 柱上; ② 把n –1 个盘子 从 y 移到 z 柱上。 x y z n n –1 Void Hanoi ( int n, char x, char y, char z ) { //将 n 个 编号从上到下为 1…n 的盘子从 x 柱,借助 y 柱移到 z 柱 if ( n = = 1 ) move ( x , 1 , z ) ; //将编号为 1 的盘子从 x 柱移到 z 柱 else { //将 n -1个 编号从上到下为1…n-1的盘子从 x 柱,借助 y 柱移到 z 柱 Hanoi ( n-1 , x , z , y ) ; move ( x , n, z) ; //将编号为 n 的盘子从 x 柱移到 z 柱 //将 n -1个 编号从上到下为 1…n-1的盘子从 y 柱,借助 x 柱移到 z 柱 Hanoi ( n-1 , y , x , z ); } } //Hanoi 3.4 队列 与同线性表相同,仍为一对一关系。 顺序队或链队,以循环顺序队更常见。 只能在队首和队尾运算,且访问结点时依照先进先出(FIFO)的原则。 关键是掌握入队和出队操作,具体实现依顺序队或链队的不同而不同。 基本操作有入队或出队,建空队列,判队空或队满等操作。 3. 存储结构 4. 运算规则 5. 实现方式 2. 逻辑结构 只能在表的一端进行插入运算,在表的另一端进行删除运算的线性表 (头删尾插) 讨论: 空队列的特征? Q (队尾) (队首) front a1 a2 a3 ^ rear p front ^ rear ③ 怎样实现入队和出队操作? 入队(尾部插入):rear-next=S; rear=S; 出队(头部删除):front-next=p-next; 完整动作设计参见教材P61-62 ② 队列会满吗? front=rear 一般不会,因为删除时有free动作。除非内存不

文档评论(0)

1亿VIP精品文档

相关文档