1. 程式人生 > 其它 >劍指offer 5、用兩個棧實現佇列 python和c++

劍指offer 5、用兩個棧實現佇列 python和c++

題目:

用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。

思路:先用一個棧1來存 “進佇列” 的資料,另一個棧2把棧1資料元素反轉來作為 “出佇列” 的順序,此時把棧1清空。在棧2的資料沒出佇列完的時候,棧1累計後面進佇列的資料。到棧2的資料都出隊列了,又把棧1資料元素反轉放到棧2來作為 “出佇列” 的順序,此時又把棧1清空。

其實也挺好理解,棧2存的都是某次出佇列前進佇列的資料,在棧2沒空之前,棧2裡面的資料都是最先進佇列的,肯定要先出。

c++版

class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
        if(stack2.size() == 0){   //棧2為空的時候把 棧1的資料反轉放在棧2裡面
            while(stack1.size()){
                stack2.push(stack1.top());
                stack1.pop();
            }
        }
        int res = stack2.top();
        stack2.pop();
        return res;
    }

private:
    stack<int> stack1;
    stack<int> stack2;
};

python版

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.Stack1=[]
        self.Stack2=[]
    def push(self, node):
        # write code here
        self.Stack1.append(node)
    def pop(self):
        # return xx
        if self.Stack2==[]:
            while self.Stack1:
                self.Stack2.append(self.Stack1.pop())
            return self.Stack2.pop()
        return self.Stack2.pop()