【數據結構與算法】001—棧與隊列(Python)

棧與隊列

1.棧(stacks)是一種只能經過訪問其一端來實現數據存儲與檢索的線性數據結構,具備後進先出(last in first out,LIFO)的特徵node

2.隊列(queue)是一種具備先進先出特徵的線性數據結構,元素的增長只能在一端進行,元素的刪除只能在另外一端進行。可以增長元素的隊列一端稱爲隊尾,能夠刪除元素的隊列一端則稱爲隊首。數據結構

棧(stacks)

stack = [3, 4, 5]
stack.append(2)
stack.append(6)
print(stack)
stack.pop()
print(stack)
stack.pop()
print(stack)
[3, 4, 5, 2, 6]
[3, 4, 5, 2]
[3, 4, 5]

隊列(queue)

from collections import deque
queue = deque(["Eric", "John", "Michael"])
print(queue)
queue.append("Terry")           # Terry arrives
queue.append("Graham")          # Graham arrives
print(queue)
queue.popleft()                 # The first to arrive now leaves
queue.popleft()                 # The second to arrive now leaves
deque(['Michael', 'Terry', 'Graham'])
print(queue)
deque(['Eric', 'John', 'Michael'])
deque(['Eric', 'John', 'Michael', 'Terry', 'Graham'])
deque(['Michael', 'Terry', 'Graham'])

使用隊列實現棧

建立兩個棧stack1和stack2,使用兩個「先進後出」的棧實現一個「先進先出」的隊列。app

咱們經過一個具體的例子分析往該隊列插入和刪除元素的過程。首先插入一個元素a,不妨先把它插入到stack1,此時stack1中的元素有{a},stack2爲空。再壓入兩個元素b和c,仍是插入到stack1中,此時stack1的元素有{a,b,c},其中c位於棧頂,而stack2仍然是空的。code

這個時候咱們試着從隊列中刪除一個元素。按照先入先出的規則,因爲a比b、c先插入隊列中,最早刪除的元素應該是a。元素a存儲在stack1中,但並不在棧頂,所以不能直接進行刪除操做。注意stack2咱們一直沒有使用過,如今是讓stack2發揮做用的時候了。若是咱們把stack1中的元素逐個彈出壓入stack2,元素在stack2中的順序正好和原來在stack1中的順序相反。所以通過3次彈出stack1和要入stack2操做以後,stack1爲空,而stack2中的元素是{c,b,a},這個時候就能夠彈出stack2的棧頂a了。此時的stack1爲空,而stack2的元素爲{b,a},其中b在棧頂。隊列

所以咱們的思路是:當stack2中不爲空時,在stack2中的棧頂元素是最早進入隊列的元素,能夠彈出。若是stack2爲空時,咱們把stack1中的元素逐個彈出並壓入stack2。因爲先進入隊列的元素被壓倒stack1的棧底,通過彈出和壓入以後就處於stack2的棧頂,有能夠直接彈出。若是有新元素d插入,咱們直接把它壓入stack1便可。it

class Solution:
    def __init__(self):
        self.stack1 = []
        self.stack2 = []
        self.result = []
    def push(self, node):
        # write code here
        self.stack1.append(node)
        self.result = self.stack1 + self.stack2
    def pop(self):
        # return xx
        if len(self.stack2) == 0:
            while self.stack1:
                self.stack2.append(self.stack1.pop())
        self.result = self.stack2
        return self.stack2.pop()


a = Solution()
a.push(1)
a.push(2)
a.push(3)
a.push(4)
print(a.result)
a.pop()
print(a.result)
a.pop()
print(a.result)
[1, 2, 3, 4]
[4, 3, 2]
[4, 3]
相關文章
相關標籤/搜索