标签:
Implement the following operations of a stack using queues.
push
to back, pop from front, size,
and is empty operations are valid.
Update (2015-06-11):
The class name of the Java function had been updated to MyStack instead of Stack.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and all test cases.
两种实现方法
1)两个队列,当取栈顶,时把所有元素进到另一个队列然后最后出队列的就是栈顶。pop的操作也是类似的。
2)一个队列,记录队列此时的长度n,出队列n次的元素就是栈顶元素。可以把出队列的元素再入队列,这样就可以用一个队列实现。
同理用两个栈实现队列也是类似的。
两个队列实现:
class Stack {
private:
queue<int>temp[2];
int cur = 0;
public:
// Push element x onto stack.
void push(int x) {
temp[cur].push(x);
}
// Removes the element on top of the stack.
void pop(void) {
while(temp[cur].size()>1){
int n = temp[cur].front();
temp[cur].pop();
temp[1-cur].push(n);
}
temp[cur].pop();
cur = 1-cur;
}
// Get the top element.
int top(void) {
while(temp[cur].size()>1){
int n = temp[cur].front();
temp[cur].pop();
temp[1-cur].push(n);
}
int ret = temp[cur].front();
temp[cur].pop();
temp[1-cur].push(ret);
cur = 1- cur;
return ret;
}
// Return whether the stack is empty.
bool empty(void) {
return temp[cur].empty();
}
};一个队列实现:
class Stack {
private:
queue<int>temp;
public:
// Push element x onto stack.
void push(int x) {
temp.push(x);
}
// Removes the element on top of the stack.
void pop(void) {
int len = temp.size();
while(len>1){
int n = temp.front();
temp.pop();
temp.push(n);
len -- ;
}
temp.pop();
}
// Get the top element.
int top(void) {
int len = temp.size();
while(len>1){
int n = temp.front();
temp.pop();
temp.push(n);
len -- ;
}
int ret = temp.front();
temp.pop();
temp.push(ret);
return ret;
}
// Return whether the stack is empty.
bool empty(void) {
return temp.empty();
}
};[LeetCode]Implement Stack using Queues
标签:
原文地址:http://blog.csdn.net/ciaoliang/article/details/46458693