以前學習的時候都沒怎麼好好的做過筆記,總是東記一點,西寫一點,甚至都不做筆記,導致後面找的時候找不到,最後還是求助搜尋引擎浪費掉很多時間。好腦筋不如個爛筆頭呀。
這次又重新學習python的資料結構及演算法(中國mooc上的公開課),就好好做個筆記吧。
棧是一種只能在一端進行插入和刪除的線性資料結構。
一般來說,棧主要有兩個操作:乙個是進棧(push),又叫作入棧、壓棧;另乙個是出棧(pop),或者叫作退棧。棧遵循的原則是後進先出,即lifo(last in first out)。
下面使用python的基本結構列表實現棧:
棧的應用:領扣上有個題是關於括號匹配的。基本思想就是:從左至右掃瞄括號串,最新開啟(most recent)的左括號,應該匹配最先遇到的右括號。這樣,第乙個左括號(最早開啟),就應該匹配最後乙個右括號(最後遇到)。這種次序反轉的識別,正好符合棧的特性。
**的實現有乙個簡單版的(只檢查小括號)和乙個普通版的(同時檢查小括號,中括號及大括號),現實中遇到更多的自然是普通版的。這裡就只貼下普通版了。
## stack()是上面寫好的類def matches(open, close): opens = '([' return opens.index(open) == closes.index(close)def check(strings): s = stack() balance = true index = 0 while index and symbol = strings[index] if symbol in '([{': s.push(symbol) else: if s.isempty(): balance = false else: top = s.pop() if not matches(top, symbol): balance = false index += 1 if balance and s.isempty(): return true else: return false
課堂筆記 資料結構與演算法 1
本筆記基於 小甲魚資料結構與演算法 第一集 資料結構在傳統上分為 邏輯結構 可以理解成資料與資料的關係。物理結構 資料在物理的磁碟的儲存形式,也可以理解成邏輯結構對映在物理記憶體或者磁碟上的儲存形式。我們主要學習邏輯結構。表面意思,單一的元素儲存在同乙個集合中,它們之間無任何關係。在樹狀結構中,裡面...
筆記 資料結構
解釋經典例題 計算給定多項式在給定點x處的值。f x a0 a1 x a n 1 x n 1 a n x n 方法一 double num int n,double array,double x 改進方法 double num int n,double array,double x clock 捕捉...
資料結構與演算法筆記
main.c檔案 主函式檔案 include seqlist.h 包含的標頭檔案 include main.h void menu intmain break case2 printf 輸入要插入的元素 while scanf s d item item 1 break case3 printf d...