1. 程式人生 > >資料結構高分筆記1327||HNCU1327:演算法2-13~2-16:靜態連結串列

資料結構高分筆記1327||HNCU1327:演算法2-13~2-16:靜態連結串列

靜態連結串列是使用順序儲存結構來實現的連結串列。嚴蔚敏《資料結構(C語言版)》在介紹靜態連結串列時使用的是一個姓氏列表。 圖1是書本上的靜態連結串列示例,圖(a)是初始化後插入了8個姓氏的連結串列,圖(b)是在第5個元素前插入了“SHI”而刪除了“WANG”的結果。 圖1:靜態連結串列示例 (a)修改前的狀態;(b)修改後的狀態 現在,我們就來實現一下這個靜態連結串列。實際上靜態連結串列與一般含有指標的連結串列沒有太大的差別,只是靜態連結串列的結點存放的空間不是在使用時臨時分配的,而是在一開始就分配了固定的一些,一般是用陣列。同時一般的連結串列使用指標來指向下一個結點而在靜態連結串列中則使用陣列下標了。大家如果看嚴蔚敏的書會發現書上的演算法還是有些問題的。下面我就直接給大家展示一種靜態連結串列的實現演算法。 最重要的是模擬系統分配記憶體的過程。可以預先定義一個全域性陣列(space)作為後面分配的空間,然後再初始化這個陣列,為以後分配做準備,如圖2。初始化後,這個陣列中的狀態應該如圖3(a)一樣。這樣,陣列的第0個節點就是用來標識哪個結點可用來儲存資料的。那麼如果是含有頭結點的靜態連結串列,則一般開始時陣列的第1個節點就是用來存放頭結點的,此時陣列第0個結點標識第2個結點可以用來儲存資料,而第1個結點(靜態連結串列的頭結點)的下一個結點下標為0,標識著這個靜態連結串列為空,如圖3(b)。靜態連結串列的初始化以及插入刪除各種演算法與一般的連結串列是相似的。具體描述如下:
圖2:型別定義、用來模擬記憶體的陣列定義以及初始化 圖3:模擬記憶體的陣列狀態。(a)初始化後的狀態,(b)給靜態連結串列分配頭結點後的狀態 圖4:在靜態連結串列中查詢元素在space中的位置(相當於地址) 圖5:給靜態連結串列中的結點分配儲存空間,實際上返回的是陣列中可用的結點下標 圖6:釋放靜態連結串列中結點的儲存空間