Python-39章 棧 隊列

棧:先進後出
隊列:先進先出

# 棧
# 特點:先進後出
class stack:
    def __init__(self,size):
        self.size = size
        self.lit = [] # 存放數據的列表
        self.top = 0 #棧頂指針,指向下一個未進來的元素的所在位置的指針
                     # 取得時候先移動向指向當前要取出的元素,然後取出
    # 入棧
    def push(self,el):
        self.lit.insert(self.top, el)
        self.top += 1

    # 出棧
    def pop(self):
        self.top -= 1
        el = self.lit[self.top]
        return el

s = stack(7)
s.push("我從來")
s.push("沒有忘記")
s.push("你")
s.push("對我")
s.push("說過的話")
s.push("和許下的諾言")
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())

# 輸出
和許下的諾言
說過的話
對我
你
沒有忘記
我從來

此時的棧雖然指定了數量,是沒有限制的,棧應該是有容量的,但是現在是無限制的

# 棧
# 特點:先進後出
class StackFullException(Exception):
    pass

class StackEmptyException(Exception):
    pass

class stack:
    def __init__(self,size):
        self.size = size
        self.lit = [] # 存放數據的列表
        self.top = 0 #棧頂指針,指向下一個未進來的元素的所在位置的指針
                     # 取得時候先移動向指向當前要取出的元素,然後取出
    # 入棧
    def push(self,el):
        if self.top >= self.size:
            raise StackFullException("you are stack is full !!!")
        self.lit.insert(self.top, el)
        self.top += 1

    # 出棧
    def pop(self):
        if self.top == 0:
            raise StackEmptyException("you are stack is empty !!!")
        self.top -= 1
        el = self.lit[self.top]
        return el

s = stack(6)
s.push("我從來")
s.push("沒有忘記")
s.push("你")
s.push("對我")
s.push("說過的話")
s.push("和許下的諾言")
s.push("hehe")
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
print(s.pop())
# 輸出
J:\Python文件\venv\Scripts\python.exe "J:/Python文件/python入門/week5/棧 隊列 雙向隊列.py"
Traceback (most recent call last):
  File "J:/Python文件/python入門/week5/棧 隊列 雙向隊列.py", line 37, in <module>
    s.push("hehe")
  File "J:/Python文件/python入門/week5/棧 隊列 雙向隊列.py", line 18, in push
    raise StackFullException("you are stack is full !!!")
__main__.StackFullException: you are stack is full !!!

Process finished with exit code 1

此時再次向裏面裝入一個值,變回拋異常

隊列

# 隊列 Python直接給出了隊列,不需要再手動寫
import queue
q = queue.Queue()  # 小寫的是文件名,大寫的是類名
q.put("吳老五")
q.put("劉老六")
q.put("齊老七")

print(q.get())
print(q.get())
print(q.get())

# 輸出
J:\Python文件\venv\Scripts\python.exe "J:/Python文件/python入門/week5/棧 隊列 雙向隊列.py"
吳老五
劉老六
齊老七

Process finished with exit code 0

雙向隊列

# 雙向隊列
from collections import deque
d = deque() # 創建雙向隊列
d.append("寶寶") # 在右側添加
d.append("打飛機")
print(d.popleft()) # 從左邊拿數據
print(d.popleft())
# 輸出:寶寶
# 打飛機

# 雙向隊列
from collections import deque
d = deque() # 創建雙向隊列
d.append("寶寶") # 在右側添加
d.append("打飛機")
d.appendleft("這是左邊") #在左邊添加
d.appendleft("插入的字符")
print(d.popleft()) # 從左邊拿數據
print(d.popleft())
print(d.popleft())
print(d.popleft())
# 輸出:
插入的字符
這是左邊
寶寶
打飛機


from collections import deque
d = deque() # 創建雙向隊列
d.append("寶寶") # 在右側添加
d.append("打飛機")
d.appendleft("這是左邊") #在左邊添加
d.appendleft("插入的字符")
print(d.pop()) #從右邊拿數據
print(d.pop())
print(d.pop())
print(d.pop())

# 輸出
打飛機
寶寶
這是左邊
插入的字符
發佈了130 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章