Leetcode[225]-Implement Stack using Queues
2015-06-16 09:15
471 查看
用队列实现栈
class Stack {
public:
// Push element x onto stack.
void push(int x) {
if(empty()){
<span style="white-space:pre"> </span>q1.push(x);
return;
}
if(!q1.empty()){
q1.push(x);
return;
}
if(!q2.empty()){
q2.push(x);
return;
}
}
// Removes the element on top of the stack.
void pop() {
if(empty()){
throw std::out_of_range("top(): empty stack");
}
else{
if(q1.size() >= 1){
while(q1.size()>1){
int temp = q1.front();
q1.pop();
q2.push(temp);
}
q1.pop();
return;
}
if(q2.size() >= 1){
while(q2.size()>1){
int temp = q2.front();
q2.pop();
q1.push(temp);
}
q2.pop();
return;
}
}
}
// Get the top element.
int top() {
if(!empty()){
if(!q1.empty())
return q1.back();
if(!q2.empty())
return q2.back();
}
else{
throw std::out_of_range("top(): empty stack");
}
}
// Return whether the stack is empty.
bool empty() {
if(q1.empty() && q2.empty())
return true;
else
return false;
}
private:
queue<int> q1;
queue<int> q2;
};同样的,我们也可以用栈实现队列,剑指offer原题
class MyQueue
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(empty())
throw std::out_of_range("pop(): empty queue");
else{
if(!stack2.empty()){
int temp = stack2.top();
stack2.pop();
return temp;
}
else{
while(!stack1.empty()){
int tmp = stack1.top();
stack1.pop();
stack2.push(tmp);
}
int temp = stack2.top();
stack2.pop();
return temp;
}
}
}
bool empty(){
if(stack1.empty() && stack2.empty())
return true;
else
return false;
}
private:
stack<int> stack1;
stack<int> stack2;
};
class Stack {
public:
// Push element x onto stack.
void push(int x) {
if(empty()){
<span style="white-space:pre"> </span>q1.push(x);
return;
}
if(!q1.empty()){
q1.push(x);
return;
}
if(!q2.empty()){
q2.push(x);
return;
}
}
// Removes the element on top of the stack.
void pop() {
if(empty()){
throw std::out_of_range("top(): empty stack");
}
else{
if(q1.size() >= 1){
while(q1.size()>1){
int temp = q1.front();
q1.pop();
q2.push(temp);
}
q1.pop();
return;
}
if(q2.size() >= 1){
while(q2.size()>1){
int temp = q2.front();
q2.pop();
q1.push(temp);
}
q2.pop();
return;
}
}
}
// Get the top element.
int top() {
if(!empty()){
if(!q1.empty())
return q1.back();
if(!q2.empty())
return q2.back();
}
else{
throw std::out_of_range("top(): empty stack");
}
}
// Return whether the stack is empty.
bool empty() {
if(q1.empty() && q2.empty())
return true;
else
return false;
}
private:
queue<int> q1;
queue<int> q2;
};同样的,我们也可以用栈实现队列,剑指offer原题
class MyQueue
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if(empty())
throw std::out_of_range("pop(): empty queue");
else{
if(!stack2.empty()){
int temp = stack2.top();
stack2.pop();
return temp;
}
else{
while(!stack1.empty()){
int tmp = stack1.top();
stack1.pop();
stack2.push(tmp);
}
int temp = stack2.top();
stack2.pop();
return temp;
}
}
}
bool empty(){
if(stack1.empty() && stack2.empty())
return true;
else
return false;
}
private:
stack<int> stack1;
stack<int> stack2;
};
相关文章推荐
- 算法系列15天速成 第九天 队列
- C++基于栈实现铁轨问题
- C语言单链队列的表示与实现实例详解
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- mysql 队列 实现并发读
- C#队列Queue用法实例分析
- C语言循环队列的表示与实现实例详解
- C++循环队列实现模型
- C#内置队列类Queue用法实例
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- C#通过链表实现队列的方法
- java数据结构之java实现栈
- C#队列Queue多线程用法实例
- C#数据结构与算法揭秘五 栈和队列
- 浅析栈区和堆区内存分配的区别
- C++中队列的建立与操作详细解析
- leetcode561 Array Partition I