温故而知新 -> 数据结构 -> 线性表 ->队列 && 栈

38 篇文章 1 订阅

写这篇博客的主要意义在于,想说明如何利用 栈去实现队列,或者如何用 队列去实现栈

:想查看其他有关数据结构知识,可点击链接 温故而知新 -> 数据结构 进行查看!

基础知识

此处关于 队列 与 栈 的具体知识可参考博主下面的两篇博客

  1. 温故而知新 -> 数据结构 -> 线性表 ->队列
  2. 温故而知新 -> 数据结构 -> 线性表 -> 栈

且上述两篇博客中也说明了 栈 与 队列 各自的程序实现!

实现

结构

1、利用 栈 实现 队列

利用栈实现队列,则需要两个栈,一个为入队栈,一个为出队栈,对应于队列中的 入队 与 出队 。

入队push :将数据存入至 入队栈 中
出队pop :由于 栈 满足 LIFO 准则,则若要实现 队列 出队操作,则需将上述 入队栈 中的数据存入至 出队栈 中,此时可实现将一开始输入的数据存入 出队栈 的栈顶,即此时 pop 的数据将为最开始的数据,满足了 FIFO 准则。

注意:当 出队栈 中数据未空时,不可将 入队栈 中的数据存入其中,否则会导致数据顺序错乱,无法准确实现 FIFO
在这里插入图片描述
在这里插入图片描述
如此情况下,队头元素 则将是 出队栈 的 栈顶元素队尾元素 则将是 入队栈 的 栈顶元素

2、利用 队列 实现 栈

利用 队列 实现 栈 有两种方法,但差别不大,具体如下:

方法一:利用一个队列
入栈 push :按照正常顺序将数据存入,此处无伤大雅
出栈 pop :利用 队列 实现 栈 的关键在于 栈 的 出栈操作,这一关键需要将原队列中此时的 队尾元素 放至 队头,使其等同于 栈 中的栈顶元素。
该步骤操作是将队列中的其他数据依次取出,然后按顺序从队尾存入该队列,直至原队尾元素到达队头,再对其进行 出队 操作,即可实现 出栈pop 。

具体如下图

在这里插入图片描述
方法二:利用2个队列
入栈 push :按照正常顺序将数据存入2个队列中的非空队列
出栈 pop :方法二中还是需要将原队列中此时的 队尾元素 放至 队头,使其等同于 栈 中的栈顶元素,实现过程与方法一中略有不同。
该步骤操作是将非空队列中的其他数据依次从队头取出,然后按顺序将这些数据存入空队列中,直至原队列中的目标队尾元素到达队头,再对其进行 出队 操作,即可实现 出栈pop ,此时原队列也将变为空队列。

注意:2个队列实现栈时,进行每次操作需保证操作结束后,其中一个队列为 空队列

具体如下图
在这里插入图片描述

程序实现

1、利用 栈 实现 队列

在这一部分呢,基于上面所说的实现方法,并利用 C语言 中的 结构体C++ 中的 分别进行了实现!

具体实现程序可见下附链接:

  1. 利用 栈 实现 队列 -> 程序实现1_利用结构体
  2. 利用 栈 实现 队列 -> 程序实现2_利用类

2、利用 队列 实现 栈

在这一部分,同样基于上面所说的实现方法,然后利用 C语言 中的 结构体C++ 中的 分别对 利用队列实现栈 进行了实现!

其中,采用了两种方式,即利用一个队列 和 利用两个队列 去实现栈,对应的程序都在下附链接的程序中有所展现!

具体实现程序可见下附链接:

  1. 利用 队列 实现 栈 -> 程序实现1_利用结构体
  2. 利用 队列 实现 栈 -> 程序实现2_利用类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值