您的位置:首页 > 产品设计 > UI/UE

Implement Stack using Queues leetcode

2016-01-15 22:23 609 查看
Implement the following operations of a stack using queues.

push(x) -- Push element x onto stack.

pop() -- Removes the element on top of the stack.

top() -- Get the top element.

empty() -- Return whether the stack is empty.

不用多想,可以使用两个queue来实现,代码如下

耗时在pop上

class Stack {
public:
// Push element x onto stack.
void push(int x) {
que1.push(x);
}

// Removes the element on top of the stack.
void pop() {
while (que1.size() > 1)
{
que2.push(que1.front());
que1.pop();
}
que1.pop();
while (!que2.empty())
{
que1.push(que2.front());
que2.pop();
}
}

// Get the top element.
int top() {
return que1.back();
}

// Return whether the stack is empty.
bool empty() {
return que1.empty();
}
private:
queue<int> que1;
queue<int> que2;
};


查看其它人的代码,发现居然可以使用一个queue来实现,实现思路非常巧妙,每一次push操作都将queue之前的元素都移到后面,使其保持栈的排序

如:

push 1

1

push 2

2 1

push 3

3 2 1

class Stack {
public:
queue<int> que;
// Push element x onto stack.
void push(int x) {
que.push(x);
for (int i = 0; i<que.size() - 1; ++i) {
que.push(que.front());
que.pop();
}
}

// Removes the element on top of the stack.
void pop() {
que.pop();
}

// Get the top element.
int top() {
return que.front();
}

// Return whether the stack is empty.
bool empty() {
return que.empty();
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: