news 2026/7/12 4:55:12

数据结构:用栈实现队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构:用栈实现队列


这道题让我们用栈来实现队列,我们知道栈是后入先出的,队列是先入先出的。我们需要用两个栈来达到以下功能:
入队:1 2 3 4 出队:1 2 3 4

思路及分析过程

我们按1 2 3 4的顺序入栈到随便一个里面:

当我们要出队的时候,出的是1,所以我们按顺序将stack1的元素入栈到stack2:

然后再让stack2出栈就把1取出来了,如果再执行出队操作,就让stack2再出栈就完成了。

此时再入队一个5,肯定不能入到stack2里面,不然就变成队列中的队头了,所以入到stack1中。

此时如果要取队头元素,取stack2就好了。

根据以上分析,我们会发现只要入队都是入到stack1中,出队都是在stack2进行操作,所以我们可以定义一个栈stackpush用来入队,stackpop用来出队。然后实现题目要求的四个函数。

代码实现

定义结构体

栈的实现我们之前写过,直接拿过来。然后先让我们定义一个结构体,我们定义两个栈:

初始化

接下来是初始化函数MyQueue* myQueueCreate(),让我们创建一个结构体,然后把这个结构体指针返回来。我们就用malloc创建一个MyQueue大小的空间,然后这两个栈直接调用初始化函数就好了,记得是传栈的地址。

入队

接下来是入队操作的函数void myQueuePush(MyQueue* obj, int x)
,我们直接入到stackpush里面去:

出队

然后就是出队操作的函数int myQueuePop(MyQueue* obj),我们需要判断stackpop是否为空栈,如果为空栈则需要把stackpush里面的元素全都挪到stackpop里面,然后再进行出队操作。

这里面的两行代码转换为图是这样的:

先取stackpush的栈顶元素4,入栈到stackpop里面,然后删除stackpush的栈顶元素。

直到stackpush的有效元素个数变成0,挪元素过程结束。

然后是出队操作,我们先用top接收stackpop的栈顶元素(因为需要返回删除的元素的值),然后出栈就好了 。

取队头元素

接下来是返回队列开头的函数int myQueuePeek(MyQueue* obj),把stackpop的栈顶元素返回来就好了,如果stackpop是空栈,同样的要进行挪元素操作。

判空

然后是判断是否为空队的函数bool myQueueEmpty(MyQueue* obj),只要两个栈都为空,就是空队。

销毁

然后就是销毁队的函数void myQueueFree(MyQueue* obj)了,我们把这两个栈销毁,然后释放掉MyQueue*指针obj的空间,再置为NULL就好了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/12 4:52:29

AI生成3D模型全流程实战:从文生3D到引擎集成的效率革命

1. 项目概述:从平面到立体的资产革命最近几年,AI生成内容的风潮从文本、图片一路席卷到了3D领域。作为一名在游戏和数字内容行业摸爬滚打了十多年的从业者,我亲眼见证了资产制作流程从纯手工雕刻到程序化生成,再到如今AI辅助甚至A…

作者头像 李华
网站建设 2026/7/12 4:48:28

Parsel:用Python类定义AI推理结构的新型编程范式

1. 项目概述:Parsel 不是又一个推理框架,而是对“思考结构”的重新建模你有没有试过让大模型写一段能真正跑通的 Python 脚本?不是那种语法正确但逻辑断裂的“伪代码”,而是有明确输入输出、能处理边界条件、模块职责清晰、甚至带…

作者头像 李华
网站建设 2026/7/12 4:45:49

荣耀笔记本Windows系统第三方桌面与多任务视图兼容性解决方案

如果你正在使用荣耀笔记本的Windows系统,可能会遇到一个让人头疼的问题:系统自带的桌面环境用久了总觉得单调,想换个第三方桌面启动器来提升使用体验,但更换后发现后台多任务卡片(任务视图)功能失效了——按…

作者头像 李华
网站建设 2026/7/12 4:45:17

Kimi LeetCode 3538. 合并得到最小旅行时间 Rust实现

这是 LeetCode 3538. 合并得到最小旅行时间 的 Rust 实现。思路本题是划分型动态规划。恰好执行 k 次合并,等价于将原路标序列切分为 n-k 个连续段,每段的单位时间为该段内所有 time 之和。状态定义: dp[i][used][last] 表示: - 当…

作者头像 李华