我們知道鍊錶中的每個節點有兩個部分,分別為資料域和指標域。我們可以用兩個陣列來模擬鍊錶中每個節點所對應的部分。
我們首先可以用乙個整形陣列data來存放序列中的數字,另乙個陣列right來 存放當前序列中每個元素右邊的元素在陣列data中的位置。
如下圖所示:
例如right[1]的值為 2,就表示當前序列中1號元素右邊的元素從放在 data[2] 中; 如果是 0,例如 right[9] 的值為 0,就表示當前序列中9號元素的右邊沒有元素。
現在需要在8前面插入乙個6,只需將6直接存放在陣列data的末尾即 data[10]=6。 接下來 將right[3]改為10,表示新序列中3號元素右邊的元素存放在data[10]中。再將right[10]改為4,表示新序列中10號元素右邊的元素存放在data[4]中。這樣我們通過right陣列就可以從頭到尾遍歷整個序列了(序列中每個元素的值都存放在對應的陣列data中),如下圖。
//初始化陣列right
for(i=
1;i<=n;i++
)//直接在陣列data的末尾增加乙個數
len++
;scanf
("%d"
,&data[len]);
//從鍊錶的頭部開始遍歷
t=1;
while
(t!=0)
t=right[t];}
//輸出鍊錶中所有的數
t=1;
while
(t!=0)
getchar()
;getchar()
;return0;
}
用陣列模擬鍊錶
用陣列模擬單鏈表資料結構課本上的單鏈表演算法,在建立每個結點時都需要new乙個空間,new函式耗時長,當結點數較多時,每個結點都需要new,這樣的演算法在題中容易超時。利用陣列模擬單鏈表可以防止超時問題 826.單鏈表 實現乙個單鏈表,鍊錶初始為空,支援三種操作 1 向煉表頭插入乙個數 2 刪除第k...
leetcode 鍊錶兩個數相加
給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...
如何查詢兩個陣列表
算是一次更深一些的思考吧,對於查資料表,通常都只有乙個 如果翻看資料手冊,就會看到資料表中對應的數值只是乙個典型值,而實際情況是感測器的值必定會在某個範圍內波動,對應乙個上限值和乙個下限值。通常使用這個典型值就可以了,方法就是這篇部落格 但如果需要查詢兩個資料表,分別是上限表和下限表,那該怎麼辦呢?...