1樓:匿名使用者
帶頭節點:head-> p1->p2->p3 ->p1->p2->p3-> p1.....
不帶頭節點: p1->p2->p3 ->p1->p2->p3-> p1.....
卻別還不明顯嗎?帶頭節點可以方便,快速的定位鍊錶第1個節點
比如迴圈鍊錶的時候,刪除p1 的時候:
head->next = p2;
p3->next = head->next; ok?
free(p1);
思路很清晰,鍊錶開始的第1個節點現在就是head->next 即 p2
否則沒有頭節點:
p3->next = p1->next;
free(p1);
會不會有一種鍊錶第1個節點到底是哪個的感覺?
當然單向迴圈這個不明顯,如果你寫個雙向迴圈,就會很方便,麻煩,我就寫單向吧``
就是方便,清晰,明了,也不是一定要用,要看情況,看需要對鍊錶做什麼操作,來決定要不要帶頭節點。你不寫幾個鍊錶沒法體會的。
祝你好運!~
2樓:塗軒
帶頭結點的鍊錶進行插入刪除等運算時不需要考慮是否是空鍊錶的情況。不帶頭結點的鍊錶在進行插入刪除操作時必須要考慮空鍊錶的情況。
3樓:匿名使用者
網上大多數是帶頭結點的操作。不帶頭結點的鍊錶可以這樣理解:把帶有頭結點的鍊錶的head變為儲存資料的結點就ok了!下面的例子:
#include
#include
#define overflow -2
typedef struct lnode
*linklist;
for(int i=2;i<
c語言鍊錶中帶有頭節點的鍊錶中為什麼不在頭節點的中存放資料?還有就是怎樣來區分帶有頭節點和不帶頭節點
4樓:匿名使用者
1、如在頭節點中存放數
據和不帶頭節點有什麼區別,頭就是頭,不是存放資料的第乙個元素~2、【帶頭節點的引入是為了對鍊錶刪除、逆向、建立的時候操作更統一,不用專門對第乙個元素單獨處理。】
3、大部分程式用帶頭節點來儲存鍊錶的長度。
4、如何區分,很簡單,看看程式的定義,和程式在建立鍊錶的時候有沒針對第乙個節點做特殊處理。
好好把嚴蔚敏的那本資料結構看看吧。不然有些東西真的在這裡將不頭側的。自己畫個圖看看。
關於c語言鍊錶的問題,關於C語言鍊錶的問題
slist是你定義的結構體的名稱,你寫的動態記憶體分配,意思是申請乙個指向slist的slist記憶體空間的指標,沒有這個名稱,就相當於乙個人沒了名字,幹什麼都不方便 slist就是nde的別名 因為你用到關鍵字typedef typedef是給型別取別名之意 如 typedef unsigned ...
在C語言鍊錶中,p q next和p next q next有什麼區別
給你普及下指標的真諦 假設兩個鍊錶節點的記憶體位址分別為aaaa和bbbb,節點內偏移4位元組處儲存名為next的指標,p 0xaaaa,q 0xbbbb,這說明p和q分別指向這兩個節點。p next是記憶體aaae處的內容,q next是記憶體bbbf處的內容 假設為cccc 那麼,p q nex...
c語言問題,急急急!關於鍊錶的,c語言問題,急急急!關於鍊錶的!
include include typedef struct listlist list createlist int n return head list a b list a,list b 計算a b,計算結果儲存在a中 else if pa next null pa是表尾else 非表頭元素和...