回顧:
每個結點包含數(shù)據(jù)域以及指針域(用于存放下一個結點的位置信息)。
單鏈表是由很多個結點組成的县貌,一個完整的單鏈表應該包括頭結點抖拴,以及尾結點(NULL)。
單鏈表的讀取思路(注意與順序存儲結構進行對比):
1. 聲明一個指針p指向鏈表的第一個節(jié)點缘缚,并且初始化工作計數(shù)j.
2.進行循環(huán)while(j<i),指針不斷后移勾笆,指向下一個節(jié)點,直到j=i桥滨,查找成功窝爪。這個時候取出數(shù)據(jù)P->data.
我們可以看出鏈表的結構中沒有定義表長弛车,所以我們無法使用for來控制循環(huán),單鏈表讀取的核心就是:工作指針后移查找蒲每。
一纷跛、單鏈表的插入和刪除:
我們在順序存儲結構中已經(jīng)看到,因為每個數(shù)據(jù)元素都是緊密相接邀杏,所以當我們進行操作的時候就會牽一發(fā)而動全身贫奠。但是對于鏈表來說,數(shù)據(jù)元素本來就是不是在一起的望蜡,所以我們可以通過改變要插入位置的前后聯(lián)系關系來進行操作叮阅。這樣就可以驚動最少的數(shù)據(jù)元素來插入或者刪除數(shù)據(jù)。
如上圖所示泣特,當我們想要在ai和ai+1中插入數(shù)據(jù)的時候浩姥,我們只需要讓ai知道自己的下一位目標是s就可以了,然后讓s知道自己的下一位目標是ai+1. 這樣的話状您,鏈表的插入操作就會變得很簡單:s->next=p-next; p->next=s;?
而我們的鏈表刪除就會變得更加的簡單勒叠,我們只需要去掉中間的ai結點就可以了。
p->next=p->next->next;
刪除:
答:設存儲元素a1的結點為q,要實現(xiàn)將結點q刪除單鏈表的操作,其實就是將它的前繼結點的指針繞過,指向它的后繼結點即可,如圖膏孟。
單鏈表第i個數(shù)據(jù)刪除結點的算法思路:
1.?聲明一結點P指向鏈表第一個結點眯分,初始化j從1開始;
2.當j<i時,就遍歷鏈表柒桑,讓p的指針向后移動弊决,不斷指向下一個結點,j累加?1魁淳;
3.若到鏈表末尾p為空飘诗,則說明第i個元素不存在;
4.則查找成功界逛,將欲刪除的結點p->next賦值給q;
5.?單鏈表的刪除標準語句p->next=q->next;
6.將q結點中的數(shù)據(jù)賦值給e,作為返回昆稿;
7.釋放q結點;
7.??單鏈表整表創(chuàng)建的算法思路:
① 聲明一結點P和計數(shù)器變量i;
② 初始化一空鏈表L;
③ 讓L的頭結點的指針指向NULL,即建立一個帶頭結點的單鏈表息拜;
④ 循環(huán):
?生成一新結點賦值給P溉潭;
?隨機生成一數(shù)字賦值給P的數(shù)據(jù)域p->data;
?將p插入到頭結點與前一新結點之間。
尾插法:
8.?單鏈表整表刪除
???當我們不打算使用這個單鏈表時少欺,我們需要把它銷毀喳瓣,其實也就是在內(nèi)存中將它 釋放掉,以便于留出空間給其他程序或軟件使用赞别。
單鏈表整表刪除的算法思路如下:
① 聲明一結點p和q;
② 將第一個結點賦值給p;
③ 循環(huán):
④ 將下一結點賦值給q;
⑤ 釋放p;
⑥ 將q賦值給p畏陕。