成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

棧的實現:Python數據結構與算法

開發
棧是一個非常實用的數據結構,可以幫助我們解決許多編程問題。通過理解其后進先出的特性和如何在Python中實現,你可以更加靈活地應用棧來解決問題。

棧(Stack)是一種特殊的線性數據結構,遵循后進先出(LIFO)的原則,即最后添加進棧的元素最先被移除。

1. 棧的基本概念

棧的操作主要有兩種:壓棧(Push)和彈棧(Pop)。壓棧是將元素放入棧頂,彈棧是從棧頂移除元素。

# 使用Python的列表實現一個簡單的棧
stack = []

# 壓棧操作
stack.append(10)
stack.append(20)
stack.append(30)

# 此時棧的狀態為 [10, 20, 30]

2. 訪問棧頂元素

不移除元素,只是查看棧頂的元素。

# 查看棧頂元素
top_element = stack[-1]  # 結果是 30

3. 彈棧操作

移除棧頂的元素。

# 彈棧操作
top_element = stack.pop()  # 移除并返回棧頂元素,結果是 30

# 此時棧的狀態為 [10, 20]

4. 棧的輔助操作

(1) 檢查棧是否為空

is_empty = not bool(stack)  # 如果棧為空,結果為 True

(2) 獲取棧的大小

size = len(stack)  # 結果是 2,因為棧中有兩個元素

5. 棧的應用

棧在編程中有很多應用,以下是一些常見的例子:

  • 函數調用:每當函數被調用時,都會將一個新的記錄(通常稱為“幀”)壓入調用棧。
  • 撤銷操作:例如文字編輯器的撤銷功能。
  • 括號匹配:檢查表達式中的括號是否正確匹配。

括號匹配示例:

def is_parentheses_balanced(expr):
    stack = []
    mapping = {")": "(", "}": "{", "]": "["}

    for char in expr:
        if char in mapping.values():
            stack.append(char)
        elif char in mapping.keys():
            if stack == [] or mapping[char] != stack.pop():
                return False
    return stack == []

# 使用示例
expr = "{[()]}"
print(is_parentheses_balanced(expr))  # True,因為括號是匹配的

6. 實現一個完整的棧類

為了更好地使用棧,我們可以實現一個棧類,提供更多有用的方法。

class Stack:
    def __init__(self):
        self.items = []

    def push(self, item):
        """壓棧操作"""
        self.items.append(item)

    def pop(self):
        """彈棧操作,返回棧頂元素"""
        return self.items.pop()

    def peek(self):
        """查看棧頂元素,不移除"""
        return self.items[-1]

    def is_empty(self):
        """檢查棧是否為空"""
        return len(self.items) == 0

    def size(self):
        """返回棧的大小"""
        return len(self.items)

# 使用棧類
s = Stack()
s.push(10)
s.push(20)
print(s.peek())  # 20
print(s.pop())   # 20

7. 綜合案例:簡單的后綴表達式求值

后綴表達式,也稱為逆波蘭表示法,是一種不需要括號的數學表示法。例如,表達式 3 + 4 在后綴表達式中表示為 3 4 +。 我們可以使用棧來計算后綴表達式的值。

def evaluate_postfix(expr):
    stack = Stack()
    tokens = expr.split()

    for token in tokens:
        if token.isdigit():
            stack.push(int(token))
        else:
            operand2 = stack.pop()
            operand1 = stack.pop()
            if token == "+":
                stack.push(operand1 + operand2)
            elif token == "-":
                stack.push(operand1 - operand2)
            elif token == "*":
                stack.push(operand1 * operand2)
            elif token == "/":
                stack.push(operand1 / operand2)

    return stack.pop()

# 使用示例
expr = "3 4 + 2 *"
print(evaluate_postfix(expr))  # 結果是 14,因為 (3 + 4) * 2 = 14

小結

棧是一個非常實用的數據結構,可以幫助我們解決許多編程問題。通過理解其后進先出的特性和如何在Python中實現,你可以更加靈活地應用棧來解決問題。

責任編輯:趙寧寧 來源: 子午Python
相關推薦

2012-05-16 17:05:33

Java數據結構

2009-08-11 14:51:11

C#數據結構與算法

2021-03-12 09:13:47

Java數據結構算法

2020-10-21 14:57:04

數據結構算法圖形

2023-03-08 08:03:09

數據結構算法歸并排序

2023-10-27 07:04:20

2023-04-27 09:13:20

排序算法數據結構

2023-03-07 08:02:07

數據結構算法數列

2020-12-17 10:12:33

數據結構算法隊列

2023-03-10 08:07:39

數據結構算法計數排序

2023-03-02 08:15:13

2023-10-06 20:21:28

Python鏈表

2021-01-28 07:33:34

JavaScript鏈表數據

2023-02-08 07:52:36

跳躍表數據結構

2023-10-30 08:31:42

數據結構算法

2022-02-22 15:27:46

數據結構容器算法

2024-01-15 06:01:36

C++數組

2021-09-12 17:31:17

Python數據結構

2023-03-13 10:08:31

數據結構算法

2023-11-06 06:43:23

單鏈表查詢數據結構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久日韩精品一区二区三区 | 国产精品一区二区视频 | 久久久久国产 | 成人在线观看黄 | 国产日韩久久久久69影院 | 日本特黄a级高清免费大片 成年人黄色小视频 | 日一区二区 | av入口| 久久久久久久一区 | 久久久久国产一区二区三区不卡 | 黄色毛片免费看 | 日韩一区二区在线视频 | www日本高清 | 99精品视频在线观看 | 亚洲区一区二区 | 国产一区二区三区四区五区加勒比 | 一区二区三区免费网站 | 久久精品国产一区老色匹 | 日本中文字幕在线观看 | 亚洲视频免费在线观看 | 一区二区成人在线 | 久久中文字幕一区 | 亚洲免费视频网站 | 最新国产精品视频 | 亚洲免费在线 | 欧美一二精品 | 色婷婷久久久亚洲一区二区三区 | 欧美 日韩 中文 | 国产91成人 | 黄视频免费观看 | 91视视频在线观看入口直接观看 | 久久精品国产免费一区二区三区 | 欧美日韩在线观看视频 | 中文字幕一区二区三区四区 | 精品在线播放 | 91久久国产综合久久 | 日本高清精品 | 国产成人精品亚洲日本在线观看 | 日本精品一区二区在线观看 | 伦理午夜电影免费观看 | 黄色大片视频 |