我們知道,陣列式計算機根據事先定義好的陣列型別與長度自動為其分配一連續的儲存單元,相同陣列的位置和距離都是固定的,也就是說,任何乙個陣列元素的位址都可乙個簡單的公式計算出來,因此這種結構可以有效的對陣列元素進行隨機訪問。但若對陣列元素進行插入和刪除操作,則會引起大量資料的移動,從而使簡單的資料處理變得非常複雜,低效。
為了能有效地解決這些問題,一種稱為「鍊錶」的資料結構得到了廣泛應用。
1. 鍊錶概述
鍊錶是一種動態資料結構,他的特點是用一組任意的儲存單元(可以是連續的,也可以是不連續的)存放資料元素。
鍊錶中每乙個元素成為「結點」,每乙個結點都是由資料域和指標域組成的,每個結點中的指標域指向下乙個結點。head是「頭指標」,表示鍊錶的開始,用來指向第乙個結點,而最後乙個指標的指標域為null(空位址),表示鍊錶的結束。
可以看出鍊錶結構必須利用指標才能實現,即乙個結點中必須包含乙個指標變數,用來存放下乙個結點的位址。
實際上,鍊錶中的每個結點可以用若干個資料和若干個指標。結點中只有乙個指標的鍊錶稱為單鏈表,這是最簡單的鍊錶結構。
再c++中實現乙個單鏈表結構比較簡單。例如,可定義單鏈表結構的最簡單形式如下
structnode;
2. 鍊錶結點的訪問
由於鍊錶中的各個結點是由指標鏈結在一起的,其儲存單元文筆是連續的,因此,對其中任意結點的位址無法向陣列一樣,用乙個簡單的公式計算出來,進行隨機訪問。只能從鍊錶的頭指標(即head)開始,用乙個指標p先指向第乙個結點,然後根據結點p找到下乙個結點。以此類推,直至找到所要訪問的結點或到最後乙個結點(指標為空)為止。
下面附上各種操作**:
1int chaxun(node *head,int k)
7void charu(node *head,int pos,int
v)17
void shanchu(node *head;int pos)
附上陣列版:
int v[maxn],next[maxn];
int chaxun(int head,int k)
return rec;
}void insert(int x)
else break;
}}
鍊錶 整理小結
我們知道,陣列式計算機根據事先定義好的陣列型別與長度自動為其分配一連續的儲存單元,相同陣列的位置和距離都是固定的,也就是說,任何乙個陣列元素的位址都可乙個簡單的公式計算出來,因此這種結構可以有效的對陣列元素進行隨機訪問。但若對陣列元素進行插入和刪除操作,則會引起大量資料的移動,從而使簡單的資料處理變...
鍊錶的小結
最近新學的關於鍊錶的操作,做了乙個小小的總結吧,鍊錶的一些簡單操作。文筆比較拙略,望高手諒解,指正。均已經在dev上測試執行,保證無錯。如果有和我一樣的新手大家可以一起交流一下。include include struct test struct test creat from head struc...
鍊錶小結(1)
所謂鍊錶,顧名思義是像鏈條一樣的,鏈條是由乙個乙個的鏈結連起來的,所以在煉表裡也有相似的結構,在煉表裡存放資料是無序的,它是由乙個乙個的結點連起來的,而在每個結點裡存放了資料,這樣整個連起來就形成了鍊錶。而鍊錶還分為單向鍊錶 迴圈鍊錶 雙向鍊錶。下面就來簡單說下單向鍊錶。public class l...