两个栈实现队列

两个栈实现队列

首先,我们先了解一下栈和队列。
(stack)是限定仅在表尾进行插入和删除操作的线性表。
我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(buttom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表简称LIFO结构。

队列(queue)是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为先进先出(First In First Out)的线性表。

以下是我代码的实现:
我偷懒了,没有写成类模板,建议大家写的时候写成类模板。
在这里插入图片描述
代码实现的是队列的功能,并不是说有了队列的结构和性质。
在这里插入图片描述
实现队列的push函数,在队列的末尾添加一个元素,我们将添加的元素全部放入栈1中,同时用计数器统计元素个数。在这里插入图片描述
实现队列的empty()函数,判断队列是否为空,判断栈1是否为空即可知队列是否为空。
在这里插入图片描述
实现队列的back()函数,返回队列的最后一个元素,先判断队列是否为空,为空直接返回-1,否则返回栈1的栈顶元素。拿123举例,队列是先进先出,123进,123出,栈是后进先出,123进,321出,返回队列的最后一个元素3,即返回栈的栈顶元素3。
在这里插入图片描述
实现队列的size()函数,返回队列中元素的个数,直接返回计数器。
在这里插入图片描述
实现队列的front()函数,返回队列第一个元素,先判断队列是否为空,为空直接返回-1。我们要求的是队列的第一个元素,拿123举例,即1为第一个元素,而我们将元素存放在栈1中,栈顶元素为3,此时将栈1中的元素全部取出来放入栈2中,栈2的栈顶元素为1,即为所求。在代码中我用临时变量保存了栈2的栈顶元素,因为我还要将栈2的元素又放回栈1,这样方便函数的操作,所有操作都和栈1有关。在这里插入图片描述
实现队列的pop()函数,删除队列的第一个元素。和front()函数操作相似,先将栈1元素添加到栈2中,此时栈2栈顶元素即为所求,删除栈2栈顶元素后再将栈2元素返回到栈1中,方便函数操作。

在这里插入图片描述

在这里插入图片描述
上面是运行结果,结果显示正确。

如有问题欢迎指出~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值