雙棧=>隊列

隊列

先進先出(FIFO)

後進先出(LIFO)

雙棧實現隊列

如何用兩個棧,僅使用棧的基本操作實現隊列。

雙棧隊列

思路:
1. 進隊列操作使用stack2, 當enqueue數據時,直接把數據push到stack2.
2. 出隊列操作使用stack1, 當dequeue數據時, 首先判斷stack1是否爲空,如果不爲空,則從stack1 pop數據返回。如果stack1爲空,則依次把stack2的數據全部pop出來,並push到stack1, 使用stack1 pop數據返回。

源碼參考實現

class QueueTwoStack(object):
    '''使用雙棧實現隊列'''
    def __init__(self):
        self.__stack1 = LinkStack()
        self.__stack2 = LinkStack()

    def enqueue(self, v):
        self.__stack2.push(v)

    def dequeue(self):
        if self.__stack1.isEmpty():
            while not self.__stack2.isEmpty():
                self.__stack1.push(self.__stack2.pop())
        return self.__stack1.pop()

    def peek(self):
        if self.__stack1.isEmpty():
            while not self.__stack2.isEmpty():
                self.__stack1.push(self.__stack2.pop())
        return self.__stack1.peek()

    def isEmpty(self):
        return self.__stack1.isEmpty() and self.__stack2.isEmpty()

    def size(self):
        return self.__stack1.size() + self.__stack2.size()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章