剑指offer——栈与队列之间的相互实现
来源:互联网 发布:淘宝手机端详情编辑 编辑:程序博客网 时间:2024/06/05 23:39
题目描述1:
用两个栈来实现一个队列,完成队列的Push和Pop操作。在线编程见用两个栈实现队列。
分析:队列的特点是“先进先出”,而栈的特点是“先进后出”。始终维护s1作为存储空间,以s2作为临时缓冲区。入队时,将元素压入s1。出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒回”s1。具体分析见下图:
代码如下:
class Solution{public: void push(int node) { stack1.push(node); } int pop() { int ans; if(stack2.empty()) { while(!stack1.empty()) { stack2.push(stack1.top()); stack1.pop(); } } ans = stack2.top(); stack2.pop(); return ans; }private: stack<int> stack1; stack<int> stack2;};
题目描述2:
用两个队列来实现一个栈,完成栈的Push和Pop操作。
分析:假设有两个队列Q1和Q2,当二者都为空时,入栈操作可以用入队操作来模拟,可以随便选一个空队列,假设选Q1进行入栈操作,现在假设a,b,c依次入栈了(即依次进入队列Q1),这时如果想模拟出栈操作,则需要将c出栈,因为在栈顶,这时候可以考虑用空队列Q2,将a,b依次从Q1中出队,而后进入队列Q2,将Q1的最后一个元素c出队即可,此时Q1变为了空队列,Q2中有两个元素,队头元素为a,队尾元素为b,接下来如果再执行入栈操作,则需要将元素进入到Q1和Q2中的非空队列,即进入Q2队列,出栈的话,就跟前面的一样,将Q2除最后一个元素外全部出队,并依次进入队列Q1,再将Q2的最后一个元素出队即可。
/* 用两个队列模拟入栈操作 */ void push(PQUEUE pS1,PQUEUE pS2,int val) { if(is_empty(pS2)) en_queue(pS1, val); else en_queue(pS2, val); } /* 用两个队列模拟出栈操作 */ bool pop(PQUEUE pS1,PQUEUE pS2,int *pData) { if(is_empty(pS1) && is_empty(pS2)) return false; int DelData; if(!is_empty(pS2)) { int len = length(pS2); while(len-- > 1) { de_queue(pS2,&DelData); en_queue(pS1,DelData); } //将队列的最后一个元素出队,作为出栈元素 de_queue(pS2,pData); return true; } if(!is_empty(pS1)) { int len = length(pS1); while(len-- > 1) { de_queue(pS1,&DelData); en_queue(pS2,DelData); } //将队列的最后一个元素出队,作为出栈元素 de_queue(pS1,pData); return true; } }
参考资料:
用两个栈实现队列
【剑指offer】两个队列实现一个栈
0 0
- 剑指offer——栈与队列之间的相互实现
- 栈与队列的相互实现
- 栈与队列的相互实现
- 栈与队列相互实现
- 队列与栈相互实现
- 每日一题之队列与栈的相互实现
- 《剑指offer》——用两个栈实现队列
- 《剑指offer》——用两个栈实现队列
- 剑指offer——用两个栈实现队列
- 用两个栈实现队列——剑指offer
- 剑指offer——用两个栈实现队列
- 剑指offer——用两个栈实现队列
- 剑指offer——用两个栈实现队列
- 剑指offer——用两个栈实现队列
- 剑指offer——用两个栈来实现队列
- 剑指offer—用两个栈实现队列
- 《剑指offer》—5、用两个栈实现队列
- 牛客网—剑指offer-用两个栈实现队列
- Java WeakReference的理解与使用
- Android自动化测试--monkey的使用
- 淘宝搜索排序
- OpenGLes学习之路(一)————opengles内部执行顺序(1)
- 电话验证码通道
- 剑指offer——栈与队列之间的相互实现
- 【poj1001】 Exponentiation
- 如何使用Sublime的插件(以HexViewer为例)
- MyBatis Generator 详解
- 从context分析到脱离三方app的dialog
- 剑指Offer:字符串的排列
- 每日一个window命令(每日一个linux命令的姐妹篇)
- Java中导入、导出Excel
- iOS利用Block传值