1. 程式人生 > >【算法導論】第10章,基本數據結構

【算法導論】第10章,基本數據結構

第一個元素 好的 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章,基本數據結構