1 8 靜態鍊錶綜合知識點

2021-10-08 15:44:40 字數 1867 閱讀 7143

目錄

1. 概念理解

2. **定義

3. 實現基本操作

4. 小結

<1>. 和單鏈表的區別

<2>. 細節說明

<1> 靜態鍊錶中陣列下標為 0 的結點充當了 「頭結點」 的作用,(也就是說該結點不存放實際的資料元素)。靜態鍊錶中的陣列下標(游標)類似單鏈表中指標,只不過指標指明了具體的記憶體位址,而靜態鍊錶的游標只是指明了下乙個元素的陣列下標。

<2> 在單鏈表中,最後乙個結點指標指向了 null, 而在靜態鍊錶中,最後乙個結點的游標值設定為了 -1 。

<3> 靜態鍊錶中,存放各個節點的記憶體空間是連續的。所以,假設乙個靜態鍊錶每個資料元素 佔4b, 每個游標佔4b,每個結點共8b,又假設起始位置為 addr ,那麼陣列下標為 2 的存放位址為(addr + 2*8)  。通過這樣的方式就可以將靜態鍊錶的陣列下標(游標)把它對映成某乙個陣列下標所對應節點的實際記憶體位址。

思考: 為什麼課本中要用這種方式來定義靜態鍊錶中?用熟知的陣列方式來定義靜態鍊錶它不香嗎?

類似: lnode *  和 linklist 。 因為用 struct node a[maxsize], 定義靜態鍊錶,struct node

a[maxsize]; a看起來像是乙個 node型的陣列。 而使用 slinklist a ; 定義靜態鍊錶,效果是等價的 但是一看**就知道 a 是乙個靜態鍊錶。

初始化靜態鍊錶==>  把a[0] 的 next 設為 -1 .

查詢: 從頭結點開始挨個往後遍歷結點。  所以如果要找到某個位序的靜態鍊錶的話,時間複雜度為 o(n) , 注意:這裡說的是某個位序的結點,不是某個陣列下標的結點。位序是指各個結點在邏輯上的順序,陣列下標反應的是結點在物理上的順序。

插入位序為 i 的結點:

<1> 找到乙個空的結點,存入資料元素。    

<2> 從頭結點出發找到位序為 i-1 的結點   

<3> 修改新節點的 next  

<4> 修改 i-1 號結點的 next .

在第一步的找空結點的操作,肉眼可看出哪些結點為空,但是站在計算機的角度,怎麼知道哪個結點為空? 一般結點中都會有資料,只不過有的資料為臟資料。

解決方法 =>在初始化的時候  可讓空的結點的 next 為某個特殊值,比如 -2 。

刪除: 除了修改游標外,還需要將此次刪除的結點的 next 設定為 -2 ,這就表示該結點沒有了資料,被**了!

靜態鍊錶: 用陣列的方式實現的鍊錶

優點:增、刪、操作不需要大量移動元素

缺點: 不能隨機訪問,只能從頭開始依次往後查詢,容量也是固定不變的。

關於鍊錶的知識點

宣告新的型別名來代替原有的型別名 比如,typedef int interger 或 typedef float real 相當於用interger來代表int型別,用real來代表float 習慣上把用typedef宣告的型別用大寫字母表示 1 以下語句宣告了了乙個名為 ptrtonode 的型別...

1 8靜態鍊錶學習

先談談理解。陣列是乙個線性的儲存,內部資料的位址也是連在一起的。但鍊錶不一樣,它有它自己的優越性。它是跳躍著的,是連在一起的 連表 它的優越性在於,一旦需要在有序的資料中插入 刪除某個新資料,只需要改變相關連線節點即可。但對於陣列,如果在開頭插入乙個數,確要後面所有數都向後平移,無疑加大了運算時間。...

靜態路由知識點

1.路由協議的分類?靜態路由 動態路由 2.路由表的作用?決定裝置的三層資料報的 關係,目標網路能匹配路由表,從相應介面出發 若不能匹配路由表,則drop丟棄掉該資料報,不會像交換機那樣泛紅 廣播 3.選取最優路由的標準?子網掩碼長度最長的最優匹配 選取路由協議中優先順序最先匹配 4.靜態路由的優點...