导航

LeetCode Implement Stack using Queues

Posted on 2016-03-30 00:43  CSU蛋李  阅读(132)  评论(0编辑  收藏  举报

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.

Notes

   You must use only standard operations of a queue -- which means only push to backpeek/pop from frontsize, and is empty operations are valid.

   Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.

   You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack). 

题目的意思是让我们用队列的基本操作来完成栈的操作,你可以再借助一个队列或者双向链表。

  你能使用的队列的方法只有push,pop(这个方法在队列中是从队头去除元素,而不是队尾),peek(在C++中是front方法),size和empty

很简单的题目,学过数据结构的应该都能实现

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

    // Removes the element on top of the stack.
    void pop() {
        int i = 1,elem=0;
        while (i<que1.size())
        {
            elem = que1.front();
            que2.push(elem);
            que1.pop();
        }
        que1.pop();
        while (!que2.empty())
        {
            elem = que2.front();
            que1.push(elem);
            que2.pop();
        }
    }

    // Get the top element.
    int top() {
        int i = 1, elem = 0;
        while (i<que1.size())
        {
            elem = que1.front();
            que2.push(elem);
            que1.pop();
        }
        i = que1.front();
        que2.push(i);
        que1.pop();
        while (!que2.empty())
        {
            elem = que2.front();
            que1.push(elem);
            que2.pop();
        }
        return i;
    }

    // Return whether the stack is empty.
    bool empty() {
        return que1.empty();
    }
};