【数据结构】第四周研讨题

一、研讨题目:

1.栈、队列的本质和操作实现。

2.两个顺序栈如何共享同一块空间【顺序表】?给出两个栈的进栈、出栈操作实现。

3.用栈模拟队列。【即利用栈的类定义实现队列的类定义】。

二、内容整理:

1.栈、队列的本质和操作实现。

这道题是我们小组准备的,主要是一些概念性的东西,代码实现比较容易。下面是大概内容的框图。


注意点:

①顺序栈的栈顶指示有的是从0开始定义,有的是从1开始,从0开始的话就等价于数组下标,从1开始的话就等价于栈内元素个数。

②循环队列的判队满和判队空:

循环队列满的条件:

                 (rear+1)%maxsize==front

循环队列空的条件:

                   rear==front

③以上的判断方式为常规做法,为了使队列满与队列空判断条件不一样,需要浪费一个存储空间。另外的方法是增加一个标志位a=0,队头和队尾指针每跃过一次则进行a=(a+1)%2,这样,当队头和队尾指针相遇,若a为1,则队满,a为0,则队空。


2.两个顺序栈如何共享同一块空间【顺序表】?给出两个栈的进栈、出栈操作实现。

要点总结:

①开辟一块空间,栈a和栈b分别取一端为栈底,元素进出,栈顶向中间靠拢,栈顶相遇则栈满。大致原理如下图:


②当时他们的代码实现部分,有同学提出了一个问题,是两栈栈顶相遇的位置浪费了一个空间,感受到这里需要注意栈顶下标的定义。

3.用栈模拟队列【即利用栈的类定义实现队列的类定义】。

要点总结:

①栈是“后进先出”策略,队列是“先进先出”策略,那么用栈来模拟队列就需要另开辟一个栈倒腾来倒腾去。

②原理大致如下:

首先要建立两个栈,可以分别称它们为“入队栈”和“出队栈”。假设入队栈里已经有元素了,如下图。


那么出队列时就需要将入队栈里面的元素全部放到出队栈中,然后取出需要出队列的元素,如下图。


入队列同理,需要将出队列里面的元素全部放到入队栈中,然后再将需要入队的元素入队列,如下图。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值