摘要:本文主要向大家介绍了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+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号