第三章栈和队列(复习)

基本概念:

栈:  栈仅在表尾进行插入或删除的线性表,又称后进先出线性表。注意栈空或栈满的判断。

栈顶指针存在两种情况,需自行判断:

        1、top指针指向栈顶元素的位置

        2、top指针指向栈顶元素的上一个位置

队列:队列只允许在一端插入,另一端删除,又称先进先出线性表。在修改队头或队尾指针都要进行对MAXQSIZE求模。

循环队列通常由两个指针来辅助构建:

  1. 队尾指针(rear):指向队尾元素的下一个位置,也就是即将插入新元素的位置。
  2. 队头指针(front):指向队头元素的位置

开始队头指针和队尾指针等于0(表示队列为空),增加元素头指针尾指针加1,删除元素头指针加

        针对假溢出的办法:

                1、少用一个元素空间。队空的条件:Q.front == Q.rear ; 队满的条件:(Q.rear + 1) % len == Q.front; (len是队列的长度)

相同点:

        栈和队列有两种存储:顺序存储和链式存储。

        栈和队列的逻辑结构相同:线性结构。(和线性表一样,数据元素之间存在一对一的关系)

练习:

7. (单选题, 2.5分)用链接方式存储的队列,在进行删除运算时

  • A. 仅修改头指针
  • B. 仅修改尾指针
  • C. 头、尾指针都要修改
  • D. 头、尾指针可能都要修改
  • 当未设头结点时,删除最后一个元素,需要修改头 、尾指针。

19. (单选题, 2.5分)已知循环队列存储在一维数组A[0…n-1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是

  • A. 0,0
  • B. 0,n-1
  • C. n-1,0
  • D. n-1,n-1

解析:因为该题front和rear指向的是元素,第一个进队存储在A【0】,所以front指向0,当添加元素时,rear要先加1,所以rear指向n-1。

21. (单选题, 2.5分)循环队列放在一维数组A[0…M-1]中,end1指向队头元素,end2指向队尾元素的后一个位置,假设队列两端均可进行入队和出队操作,队列中最多可容纳M-1个元素,初始为空。下列判断队满和队空的条件正确的是

  • A. 队空:end1==end2;队满:end1==(end2+1)modM
  • B. 队空:end1==end2;队满:end2==(end1+1)mod(M-1)
  • C. 队空:end2==(end1+1)mod M;队满:end1==(end2+1)modM
  • D. 队空:end1==(end2+1)mod M;队满:end2==(end1+1)mod(M-1)

22. (单选题, 2.5分)最不适合用做链式队列的链表是

  • A. 只带队首指针的非循环双链表
  • B. 只带队首指针的循环双链表
  • C. 只带队尾指针的循环双链表
  • D. 只带队尾指针的循环单链表

解析:非循环双链表是没有作用的,反而增加一些操作。

30. (填空题, 2分)循环队列用数组A[0..m-1]存放其元素值,已知其头尾指针分别是front和rear ,则当前队列的元素个数是_______。

(rear - front + m) % m

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值