日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

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

圖片

1. 棧的基本概念

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

# 使用Python/ target=_blank class=infotextkey>Python的列表實現(xiàn)一個簡單的棧
stack = []

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

# 此時棧的狀態(tài)為 [10, 20, 30]

2. 訪問棧頂元素

不移除元素,只是查看棧頂?shù)脑亍?/p>

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

3. 彈棧操作

移除棧頂?shù)脑亍?/p>

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

# 此時棧的狀態(tài)為 [10, 20]

4. 棧的輔助操作

4.1 檢查棧是否為空

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

4.2 獲取棧的大小

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

5. 棧的應用

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

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

5.1 括號匹配示例

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. 實現(xiàn)一個完整的棧類

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

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. 綜合案例:簡單的后綴表達式求值

后綴表達式,也稱為逆波蘭表示法,是一種不需要括號的數(shù)學表示法。例如,表達式 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))  # 結(jié)果是 14,因為 (3 + 4) * 2 = 14

小結(jié)

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

分享到:
標簽:Python
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定