堆疊

Python SELF TW
等級 51 , 課堂 5
開放

6.1 堆疊的定義及其特性

堆疊 是一種抽象的資料結構,代表一組依照 "後進先出" (Last In, First Out, LIFO) 原則組織的元素集合。堆疊可以像一疊書一樣:最後加入的書在頂部,會最先被移走/取走。

堆疊的定義及其特性

堆疊的特性:

  • LIFO (Last In, First Out): 最後添加的元素最先提取。
  • 有限操作: 堆疊僅支援添加 (push)、刪除 (pop) 和查看 (peek) 頂部元素。
  • 單向訪問: 只能從堆疊頂部訪問元素。
  • 實現簡單: 堆疊可以輕鬆通過數組或連結清單實現。
  • 記憶體管理: 可以以相反順序存儲和提取臨時數據或狀態。

LIFO 原則運作:

  • 添加元素 (push): 新元素添加到堆疊頂部。
  • 刪除元素 (pop): 最後添加的元素從堆疊頂部刪除。
  • 查看頂部 (peek): 可以看到頂部的元素而不將其刪除。

堆疊的元素僅從一側添加和刪除,這一側被稱為頂部 (top)。因此,最後添加的元素總是在頂部,並將最先被移除。

6.2 主要操作

主要操作 堆疊

主要操作: push, pop, peek

操作 push: 在堆疊頂部添加新元素。

時間複雜度: O(1)

使用 Python 中的 list 類模擬堆疊的示例:


stack = []
stack.append(10)  # push 10
stack.append(20)  # push 20
print(stack)  # 輸出: [10, 20]

操作 pop: 刪除並返回堆疊頂部的元素。

時間複雜度: O(1)

使用 Python 中的 list 類模擬堆疊的示例:


stack = []
stack.append(10)  # push 10
stack.append(20)  # push 20

top_element = stack.pop()  # pop
print(top_element)  # 輸出: 20
print(stack)  # 輸出: [10]

操作 peek: 返回堆疊頂部的元素而不將其刪除。

時間複雜度: O(1)

實現範例:


stack = []
stack.append(10)  # push 10

top_element = stack[-1]  # peek
print(top_element)  # 輸出: 10

6.3 堆疊的使用示例

讓我們來看看一些堆疊的使用例子:

函數調用管理

在 Python 中,堆疊用來在程序執行期間跟蹤函數。每當調用一個函數時,其返回地址和本地變量會被放入堆疊中。當函數完成執行時,控制權返回到調用它的函數,並將數據從堆疊中提取。

堆疊調用的使用示例:

在這個範例中,遞迴調用函數 factorial 使用調用堆疊來存儲每次調用的狀態,直到達到基本條件 (n == 1)。


def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))  # 輸出: 120

操作撤銷 (Undo)

堆疊用於文本編輯器和其他應用程式的操作撤銷功能。當用戶執行一個操作時,它會被保存到堆疊中。當執行 Undo 操作時,最後一個操作會從堆疊中提取並被撤銷。

使用堆疊實現操作撤銷的示例:


class TextEditor:
    def __init__(self):
        self.text = ""
        self.history = []

    def type(self, text):
        self.history.append(self.text)
        self.text += text

    def undo(self):
        if self.history:
            self.text = self.history.pop()

# 使用範例:
editor = TextEditor()
editor.type("Hello")
editor.type(" World")
print(editor.text)  # 輸出: "Hello World"
editor.undo()
print(editor.text)  # 輸出: "Hello"
editor.undo()
print(editor.text)  # 輸出: ""
1
Опрос
算法介紹,  51 уровень,  5 лекция
недоступен
算法介紹
算法介紹
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION