棧(stack)

棧(stack)是一個後進先出的線性表,只允許在棧頂插入和刪除元素

棧的結構

這裏寫圖片描述

棧的接口
  • push() :入棧
  • pop() : 出棧
  • top() : 獲取棧頂元素
  • empty(): 判空
  • size():棧中元素的個數

Python中的列表(list)就類似一個棧,對應的接口實現:
這裏寫圖片描述

棧的應用–括號匹配

  • 先創建一個棧,保存爲匹配得左括號
  • 遍歷字符串
    • 如果是左括號入棧
    • 如果是右括號
      • 此時如果棧空,右括號多於左括號
      • 取棧頂元素,如果匹配則元素出棧,否則括號匹配次序錯誤
  • 出循環後,如果棧空,則匹配正確;否則左括號多
left = {'{','[','('}
right = {'}',']',')'}

def match(Str):
    s = []#創建棧
    for c in Str: #遍歷字符串
        if c in left: #左括號
            s.append(c)
        elif c in right:#右括號    
            if not s:
                print('右括號多')
                return   #直接返回
            elif (c is ')'and s[-1] is '(' )or (c is ']' and s[-1] is '[') or (c is '}' and s[-1] is '{'):
                s.pop()
                continue
            else: 
                print('括號次序匹配不正確')
                return

    if not s:
        print('括號匹配正確')
    else:
        print('左括號多')

Str = input()#輸入表達式
match(Str)
發佈了66 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章