【算法導論】第10章,基本數據結構
阿新 • • 發佈:2018-04-27
第一個元素 好的 del 計數器 pop let delete 隊列實現 排序
10.1 棧和隊列
都是動態集合,Delete操作是預先設定好的。
棧
Insert:push Delete: pop
實現,一個計數器記錄元素數量
同理,隊列實現是一個計數器記錄首尾元素的位置,如果首元素太過靠後,尾元素可以過來。
10.2 鏈表
雙向鏈表:每一個元素是一個對象,有prev, next兩個指針,還有元素本身的數值,兩邊的元素是None
L.head指向第一個元素。
鏈表搜索 、 插入、 刪除、
哨兵:主要作用:簡化邊界值的處理!
看著也像是一個元素,只不過值為空,這樣一個雙向鏈表可以變成一個有哨兵的雙向循環鏈表,哨兵位於表頭和表尾中間。
不能濫用哨兵:如果有很多個很短的鏈表,那麽哨兵占用的額外存儲空間會造成存儲浪費。
10.3 指針和對象的實現
對象多數組表示,位置用另一個方向的下標來表示
對象單數組表示,連續的數組儲存所有的信息,位置用下標來表示。優勢:允許不同長度的對象存儲於同一數組中。
對象的分配與釋放: 一般由gc負責
以下針對多數組表示的雙向鏈表:
維護一個單鏈表:自由表,只有next數組,每個對象不是在鏈表中,就是在自由表中。自由表類似一個棧,下一個分配的就是剛剛被釋放的。
10.4 有根樹的表示
用鏈式數據結構表示:
二叉樹:很容易
節點數量無限制的數:左孩子右兄弟表示法
其他表示方法:視具體情況而定,例如完全二叉樹在堆排序中用一個數組表示。
【算法導論】第10章,基本數據結構