利用两个栈实现队列的功能
2016-06-16 16:50
295 查看
题目:利用两个栈实现队列的功能
思路:我们知道栈是后入先出的(LIFO),通过两个栈的配合是可以实现先入先出的,我们可以理解为负负得正
。我们把其中的一个栈设置为存放压入元素的栈,另一个栈用来弹出元素。这里我们需要注意的是,当弹出元素时,我们先要判断stack2是否为空。
1、不为空,那么我们直接弹出stack2的元素即可。
2、为空,那么我们要看stack1中是否有元素。若有,那么我们需要将stack1的元素导入stack2中,再弹出。若没有,那么操作是违法的,所以要抛出异常,这里为了简单起见,我直接返回-1代表操作违法。
具体代码如下,比较简单,不做过多解释,有不足的地方望各位多多提出来。谢谢。
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(!stack2.empty()){
int res=stack2.top();
stack2.pop();
return res;
}
else if(!stack1.empty()){
while(!stack1.empty()){
int temp=stack1.top();
stack1.pop();
stack2.push(temp);
}
int res=stack2.top();
stack2.pop();
return res;
}
else{
return -1;
}
}
private:
stack<int> stack1;
stack<int> stack2;
};
思路:我们知道栈是后入先出的(LIFO),通过两个栈的配合是可以实现先入先出的,我们可以理解为负负得正
。我们把其中的一个栈设置为存放压入元素的栈,另一个栈用来弹出元素。这里我们需要注意的是,当弹出元素时,我们先要判断stack2是否为空。
1、不为空,那么我们直接弹出stack2的元素即可。
2、为空,那么我们要看stack1中是否有元素。若有,那么我们需要将stack1的元素导入stack2中,再弹出。若没有,那么操作是违法的,所以要抛出异常,这里为了简单起见,我直接返回-1代表操作违法。
具体代码如下,比较简单,不做过多解释,有不足的地方望各位多多提出来。谢谢。
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(!stack2.empty()){
int res=stack2.top();
stack2.pop();
return res;
}
else if(!stack1.empty()){
while(!stack1.empty()){
int temp=stack1.top();
stack1.pop();
stack2.push(temp);
}
int res=stack2.top();
stack2.pop();
return res;
}
else{
return -1;
}
}
private:
stack<int> stack1;
stack<int> stack2;
};
相关文章推荐
- C#线程队列用法实例分析
- 算法系列15天速成 第九天 队列
- C++基于栈实现铁轨问题
- C语言单链队列的表示与实现实例详解
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- mysql 队列 实现并发读
- C#队列Queue用法实例分析
- C#多线程处理多个队列数据的方法
- C语言循环队列的表示与实现实例详解
- C++循环队列实现模型
- C#内置队列类Queue用法实例
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- C#通过链表实现队列的方法
- java数据结构之java实现栈
- C#队列Queue多线程用法实例
- C#数据结构与算法揭秘五 栈和队列
- JAVA 虚拟机 栈