線性數據結構
一旦一個數據項被添加,它相對於前後元素一直保持該位置的不變
線性數據結構有兩端,有時被稱爲左右,某些情況被稱爲前後,你也可以稱爲頂部和底部
接下來我們研究棧、隊列、deques、列表
1.0什麼是棧
棧(後進先出)是一個項的集合,添加移除新項總髮生在同一端,這一端通常稱爲 頂部,與頂部相對應的端稱爲底部
棧的底部很重要,因爲在棧中靠近底部的項是存儲時間最長的。最近添加的項是最先會被移除的。這種排序原則有時被稱爲 LIFO,後進先出。它基於在集合內的時間長度做排序。較新的項靠近頂部,較舊的項靠近底部。
舉個例子:。幾乎所有的自助餐廳都有一堆托盤或盤子,你從頂部拿一個,就會有一個新的托盤給下一個客人。想象桌上有一堆書, 只有頂部的那本書封面可見,要看到其他書的封面,只有先移除他們上面的書。
我們新建一個棧包含了很多Python對象
Python 數據對象創建和刪除的過程,注意觀察他們的順序。
棧的抽象數據類型由以下結構和操作定義。如上所述,棧被構造爲項的有序集合,其中項被添加和從末端移除的位置稱爲“頂部”。棧是有序的 LIFO 。棧操作如下。
- Stack() 創建一個空的新棧。 它不需要參數,並返回一個空棧。
- push(item)將一個新項添加到棧的頂部。它需要 item 做參數並不返回任何內容。
- pop() 從棧中刪除頂部項。它不需要參數並返回 item 。棧被修改。
- peek() 從棧返回頂部項,但不會刪除它。不需要參數。 不修改棧。
- isEmpty() 測試棧是否爲空。不需要參數,並返回布爾值。
- size() 返回棧中的 item 數量。不需要參數,並返回一個整數。
我們定義一個stack_definiton.py文件
class Stack: def __init__(self): self.items = [] def isEmpty(self): return self.items == [] def push(self, item): self.items.append(item) def pop(self): self.items.pop() def peek(self): return self.items[len(self.items) - 1] def size(self): return len(self.items) def list1(self): return self.items
再定義一個python_example.py 對上述定義的方法進行測試
from python_basic_stack.stack_definition import Stack # 定義一個對象 s = Stack() # 判斷棧是否爲空 print("棧是否爲空:", s.isEmpty()) # 4入棧 s.push(4) # dog入棧 s.push("dog") # 輸出當前棧的成員 print(s.list1()) # 輸出棧頂 print(s.peek()) # 8.入棧 s.push(8.4) # 輸出當前棧的成員 print(s.list1()) # 棧頂第一個元素出棧 s.pop() # 輸出當前棧的成員 print(s.list1()) # 輸出棧頂 print(s.peek()) # 棧頂第一個元素出棧 s.pop() # 輸出當前棧的成員 print(s.list1()) # 輸出棧頂 print(s.peek()) # 棧頂元素出棧 s.pop() # 輸出當前棧的成員 print(s.list1()) # 棧是否爲空 print(s.isEmpty())