python-數據結構-棧的基本實現

線性數據結構

        一旦一個數據項被添加,它相對於前後元素一直保持該位置的不變 

        線性數據結構有兩端,有時被稱爲左右,某些情況被稱爲前後,你也可以稱爲頂部和底部

        接下來我們研究棧、隊列、deques、列表

1.0什麼是棧

棧(後進先出)是一個項的集合,添加移除新項總髮生在同一端,這一端通常稱爲 頂部,與頂部相對應的端稱爲底部

棧的底部很重要,因爲在棧中靠近底部的項是存儲時間最長的。最近添加的項是最先會被移除的。這種排序原則有時被稱爲 LIFO,後進先出。它基於在集合內的時間長度做排序。較新的項靠近頂部,較舊的項靠近底部。

舉個例子:。幾乎所有的自助餐廳都有一堆托盤或盤子,你從頂部拿一個,就會有一個新的托盤給下一個客人。想象桌上有一堆書, 只有頂部的那本書封面可見,要看到其他書的封面,只有先移除他們上面的書。


我們新建一個棧包含了很多Python對象


Python 數據對象創建和刪除的過程,注意觀察他們的順序。


        棧的抽象數據類型由以下結構和操作定義。如上所述,棧被構造爲項的有序集合,其中項被添加和從末端移除的位置稱爲“頂部”。棧是有序的 LIFO 。棧操作如下。

  1. Stack() 創建一個空的新棧。 它不需要參數,並返回一個空棧。
  2. push(item)將一個新項添加到棧的頂部。它需要 item 做參數並不返回任何內容。
  3. pop() 從棧中刪除頂部項。它不需要參數並返回 item 。棧被修改。
  4. peek() 從棧返回頂部項,但不會刪除它。不需要參數。 不修改棧。
  5. isEmpty() 測試棧是否爲空。不需要參數,並返回布爾值。
  6. size() 返回棧中的 item 數量。不需要參數,並返回一個整數。
我們通過python語言來實現:

我們定義一個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())

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章