两个栈实现一个队列&两个队列实现一个栈

Hello,今天Val来给大家分享关于利用 栈实现队列 和 利用队列来实现栈。

准备知识

1、栈 特点: 栈顶插入数据,栈顶删除数据
LIFO(last in first out)后进先出
2、队列 特点: 队列队头删除数据,队尾插入数据
FIFO(first in first out)先进先出

一、那么如何利用两个栈实现一个队列?
我们知道不管是在队列中插入数据,还是删除数据,它都有它的规则,不管我们底层怎样去实现它,都必须保证它的规则不发生改变,我们需要了解队列(queue)的接口。
基本有插入和删除操作,取队头数据,队列的大小,是否为空等。
两个栈实现一个队列:创建一个StoQS类,在类里面实现插入、删除等的接口,类里面有两个栈,一个栈存放数据,另一个栈用来辅助实现队列。

Push插入:队列插入和栈的插入一样,所以直接在类里面写函数内部利用栈的插入函数即可;
Pop删除:队列删除数据是头删(注意删除数据前要判断里面是否还有数据),如果有数据,删除内部栈的栈底数据,此时需要辅助栈来辅助实现这个功能。

二、两栈 To 队列 思想过程
1、stack 是一个容器适配器(container),它在C++库里面有构造函数(constructor()),栈的尺寸大小函数(size()),返回栈顶数据(top())
,插入(push()),删除栈顶元素(pop());

(1)还有在C++11里才有的函数swap(),它的作用是交换两个栈的数据;在两栈实现队列的Pop()功能时,我用了两个栈,先把第一个放到第二个中去,当第一个中元素剩下一个时,就相当于是队列的第一个元素了,记录它,(如果栈2非空)再把栈2中的元素放回栈1,始终以栈1为基础栈,栈2做辅助栈。

最后当我想起来栈有swap()接口时,嗯,用swap应该比较方便,当我为了拿到栈1栈底数据时,把栈1中的数据放到栈2中,当栈1剩一个元素时,删掉它,然后如果栈2非空,栈1和栈2交换即可。 同理,我在实现Front()函数时也用到了swap()函数。 如果要用swap()函数,记住一定要注意你的编译环境,C++11,是2011年出来的,如果你的编译器在11年以前

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值