資料結構與演算法python第九天
棧的應用
簡單括號匹配
- 類似於這樣的表示式:(5+6)*(7+8)/(4+3)
- 有些函式語言,如Lisp,在函式定義的時候會用到大量的括號
比如: (defun square(n)
(* n n))
這個語句定義一個計算平方值的函式 - 括號遵循“平衡”規則
- 對括號是否正確匹配的識別是很多語言編譯器的基礎演算法
構造括號匹配識別演算法
- 從左到右掃描括號串,最新開啟的左括號,應該匹配最先遇到的右括號
- 次序反轉識別,符合棧的特性
from pythonds.basic.stack import Stack
def parChecker(symbolString):
s = Stack
balanced = True
index = 0
while index < len(symbolString) and balanced: #索引小於象徵字串並且平衡
symbol = symbolString[index] #象就等於字串帶索引
if symbol == "(": #左括號匹配
s.push(symbol) #進棧操作
else:
if s.isEmpty(): #檢查棧是否為空
balanced = False #就沒達到平衡
else:
s.pop() #刪除
index = index + 1
if balanced and s.isEmpty(): #如果平衡而且是空棧
return True
else:
return False
print(parChecker('((()))'))
print(parChecker('(((()))'))
更多括號匹配
- ()、{}、[],分別是列表、字典、元組和表示式
- 混合使用,注意開閉
from pythonds.basic.stack import Stack
def parChecker(symbolString):
s = Stack
balanced = True
index = 0
while index < len(symbolString) and balanced: #索引小於象徵字串並且平衡
symbol = symbolString[index] #象就等於字串帶索引
if symbol == "([{": #左括號匹配
s.push(symbol) #進棧操作
else:
if s.isEmpty(): #檢查棧是否為空
balanced = False #就沒達到平衡
else:
s.pop() #刪除
if not matches(top, symbol):
balanced = False
index = index + 1
if balanced and s.isEmpty(): #如果平衡而且是空棧
return True
else:
return False
def matches(open, close):
opens = "([{" #matches匹配
closer = ")]}"
return opens.index(open) == closers.index(close)
print(parChecker('{{([][])}()}'))
print(parChecker('[{()]'))
通用括號匹配演算法
- HTML/XML文件有類似於括號的開閉標記,這種層次結構化文件的校驗、操作也可以通過棧來實現
計算機領域的任何問題都可以通過增加一個間接的中間層來解決
相關文章
- python資料結構與演算法Python資料結構演算法
- python演算法與資料結構-什麼是資料結構Python演算法資料結構
- python演算法與資料結構-演算法和資料結構介紹(31)Python演算法資料結構
- python之資料結構與演算法分析Python資料結構演算法
- python演算法與資料結構-棧(43)Python演算法資料結構
- 資料結構與演算法-資料結構(棧)資料結構演算法
- python演算法與資料結構-佇列(44)Python演算法資料結構佇列
- python演算法與資料結構-快速排序(36)Python演算法資料結構排序
- python演算法與資料結構-單連結串列(38)Python演算法資料結構
- python演算法與資料結構-資料結構中常用樹的介紹(45)Python演算法資料結構
- 資料結構與演算法資料結構演算法
- 資料結構:初識(資料結構、演算法與演算法分析)資料結構演算法
- python演算法與資料結構-希爾排序(35)Python演算法資料結構排序
- python演算法與資料結構-順序表(37)Python演算法資料結構
- python演算法與資料結構-氣泡排序(32)Python演算法資料結構排序
- python演算法與資料結構-插入排序(34)Python演算法資料結構排序
- python演算法與資料結構-雙向連結串列(40)Python演算法資料結構
- 資料結構與演算法:圖形結構資料結構演算法
- Python資料結構與演算法_第1節_引入概念Python資料結構演算法
- 資料結構與演算法 - 串資料結構演算法
- 【資料結構與演算法】bitmap資料結構演算法
- 資料結構與演算法——字串資料結構演算法字串
- 資料結構與演算法——排序資料結構演算法排序
- 資料結構與演算法(1)資料結構演算法
- 資料結構與演算法02資料結構演算法
- 資料結構與演算法-堆資料結構演算法
- 資料結構與演算法03資料結構演算法
- 【JavaScript 演算法與資料結構】JavaScript演算法資料結構
- 演算法與資料結構——序演算法資料結構
- 資料結構與演算法——概述資料結構演算法
- 資料結構與演算法(java)資料結構演算法Java
- 資料結構與演算法之線性結構資料結構演算法
- 資料結構與演算法-連結串列資料結構演算法
- 用Python解決資料結構與演算法問題(三):線性資料結構之棧Python資料結構演算法
- Python中資料結構與特性Python資料結構
- [資料結構與演算法] 排序演算法資料結構演算法排序
- 《Python資料結構與演算法(影片教學版)》簡介Python資料結構演算法
- Python資料結構與演算法_第6節_排序 & 搜尋Python資料結構演算法排序