C语言编程入门:两个栈实现一个队列
Vivian 2018-06-19 来源 : 阅读 1088 评论 0

摘要:本文主要向大家介绍了C语言编程入门,告诉我们如何两个栈实现一个队列,通过具体的实例让大家了解,希望对大家学习C语言编程入门有所帮助。

本文主要向大家介绍了C语言编程入门,告诉我们如何两个栈实现一个队列,通过具体的实例让大家了解,希望对大家学习C语言编程入门有所帮助。

栈:先进后出的一种数据结构。
队列:先进先出的一种数据结构。
此时如果我们先有一个栈是不够的,我们只能把先入栈的元素后出来,后面入栈的元素先出来。这是我们便想如何才能实现一个先进先出的结构呢。
看下图:
C语言编程入门:两个栈实现一个队列

我们先把元素倒入S1栈中,在把S1栈中的元素逐个压栈到S2里面,再从S2出栈,即可达到先入栈的元素先出。

此时我们可以有一个小优化,最后一个元素X1可不入S2减少一次压栈的操作。

方法:

入队时,将元素压入s1。

出队时,判断s2是否为空,如不为空,则直接弹出顶元素;如为空,则将s1的元素逐个“倒入”s2,把最后一个元素弹出并出队。

举个例子:s1从栈底到栈顶依次为1、2、3,s2为空,此时做出队操作:把s1倒入s2,则s2从栈底到栈顶依次为3、2、1,将栈顶的1弹出,之后不用把s2倒回s1。之后,如果入队两个元素,如4、5,则将其压入s1;如果此时出队一个元素,由于s2不为空,则直接弹出栈顶的2;再出队,由于s2还不为空,则直接弹出栈顶的3;再次出队,由于s2为空了,将s1的元素(依次为5、4)倒入s2,再弹出栈顶的4,再出队,由于s2又不为空了,直接弹出5。一切正常。

实现代码如下:

[cpp] view plain copy print?
1. template <typename T>  
2. class CQueue  
3. {  
4. public:  
5.     CQueue(void);  
6.     ~CQueue(void);  
7.     void appendTail(const T&node);  
8.     T deleteHead();  
9. private:  
10.     stack<T> stack1;  
11.     stack<T> stack2;  
12. };  
13.   
14. template<class T>  
15. void CQueue<T>::appendTail(const T& node)//在队列尾部添加数据  
16. {  
17.     stack1.push(node);  
18. }  
19. template<class T>  
20. T CQueue<T>::deleteHead()  
21. {  
22.     T tmp = 0;  
23.     if (stack2.empty()) //若栈2为空  
24.     {  
25.         while (!stack1.empty())  
26.         {  
27.             tmp = stack1.top();  
28.             stack2.push(tmp);  
29.             stack1.pop();  
30.         }  
31.     }  
32.     tmp = stack2.top();  
33.     stack2.pop();  
34.     return tmp;  
35. }

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @Vivian 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程