為什麼C語言建立連結串列需要用指向節點指標的指標

時間 2022-08-30 13:25:08

1樓:浪裡白條

邏輯上相鄰的兩個資料元素在物理儲存單元中不一定連續,其邏輯順序是通過連結串列中的指標連結次序來實現的。

2樓:匿名使用者

你這問題問的就像為什麼鉤子要掛到環上

關於c語言連結串列 建立動態單向連結串列時為什麼需要結構體指標p1和p2 一個頭指標不就夠了嗎,對於鏈

3樓:匿名使用者

首先,頭指標不能丟,需要

儲存的,而p1是從頭指標得到首節點後,檢視當前指向節點的next是否為空判斷是否尾節點,如果不是尾節點,或者說當前節點的next不為null則p1將被賦值成這個next以便找到連結串列下一個節點,而p1一開始儲存的頭指標就會被沖掉,所以在進行操作後p1就不能被當成鏈首指標來用了。

其次,新的節點生成,會通過new或malloc來申請空間,其返回值是個指標,這時一般要用指標變數p2來接收這個指標,然後將連結串列尾節點的next賦值成這個p2的內容,p2指向的next再賦值成null成為尾節點。

最後,如果需要在連結串列中插入,就需要一個指標p1指向當前節點,另一個p2指向當前節點之後的節點,然後將p1的next賦值成新節點指標,新節點指標的next賦值成p2,完成插入。

總體來說,所謂p1和p2是臨時輔助性的變數,是為方便使用的中間變數,這個從方便出發申請的工作變數也無需節省。

4樓:♀安若晨

建立一個動態連結串列的時候都會定義兩個結構體指標(p1 p2), 指標p2的作用一般都是用來將新結點(p1)的地址賦值給上一個結點的next成員。如:p2-> next = p1; 這個操作實現了連結串列中各個結點的關聯關係。

為什麼有的單連結串列有的用指向節點的指標有的用指向指標的指標做函式引數呢?兩個還都正確

5樓:搗蒜大師

都行,看你怎麼用。

比如傳個引數你可以傳值或者傳它的地址,都能達到目的。

連結串列新增函式中為什麼要用指向連結串列指標的指標

6樓:匿名使用者

這完全要看你怎麼去寫初始化連結串列的函式了,如果你在主函式裡定義一個指向頭結點的指標,那麼就不需要返回,但是你傳參的時候,要傳的是該指標的地

7樓:匿名使用者

你最好把函式原型寫出來啊

c語言中定義連結串列必須要指向下一個元素的指標麼?

8樓:匿名使用者

沒有next的指標應該不算連結串列吧。這個是約瑟夫問題。讓連結串列的最後一個節點的next指向連結串列的第一個節點,形成迴圈連結串列。也就是說不要頭結點了。然後就很容易實現啦。

9樓:匿名使用者

沒有next指標你沒法把多個節點連線起來啊,那就不叫連結串列了// s:~連結串列實現

#include

typedef struct list list, *node;

int main()

jc[i-1].t = jc;

prev = jc + 13 - 1;

next = jc;

i = 0;

while(prev != next) else}printf("survivor:%d\n", prev->id);

return 0;}

c語言的單連結串列在開創記憶體空間時為什麼要用到雙重指標?

10樓:匿名使用者

你的意思是復這樣嗎

list *l;

insert(&l);//初始

化制insert(list **l)

你問的是 初始化中 為什麼要雙重指標嗎?

如果是的話,那麼意思是,你想通過函式來改變l的值,但是l是指標型別,所以你要改變它的值就要傳l的地址進去,因為雙重指標的意思就是指向指標的指標,就是指標的地址,那麼**l就是指向指標l的地址,那麼通過函式呼叫雙重指標就能改變指標l的值。

道理就是:要傳遞變數的地址才能使變數的值發生變化.現在的變數是指標型,所以要傳指標型別的地址,也就是雙重指標。

不知道我理解對了沒

用c語言建立連結串列時,必須用兩個指標嗎

11樓:匿名使用者

一個指標就夠了,還有一個長度標識。

struct list;

12樓:匿名使用者

是的,一頭一尾,分別要用指標標識出來

c語言問題,為什麼連結串列操作過程中對於結構體指標,都要用malloc來開闢記憶體空間,

13樓:匿名使用者

這兩個函式再明白不過了,設計者在類package中定義了一個package* pnext;用來指向連結串列的下一個元素,getnext就是要取得下一個元素,自然返回該指標,setnext就是要給當前元素指定其下一個元素的地址,自然是給pnext賦值。

二、在建立第一個package物件時,pnext初始化為0,那麼在建立第二個package物件時,第一個package物件中的pnext是如何指向它的(不是已經初始化為0了麼?)?

看這段**:

package* ppackage= new package(pbox);

if (phead)

ptail->setnext(ppackage);

先建立第二個package物件,然後ptail->setnext(ppackage);

注意ptail永遠指向連結串列的最後一個物件,因此ptail->setnext(ppackage);的意思是將第二個物件是放在了第一個物件的pnext中,也就將第一個物件和第二個物件連結起來了。

三、若把當次建立的package物件的地址ppackage賦予給pnext,那麼pnext 不是指向剛剛建立的物件了麼?好像並沒有指向下一個package物件啊?

正如上面所說,setnext是把剛剛建立的物件放到當前連結串列最後一個元素的pnext成員裡,在此之前,剛剛建立的物件還不在連結串列中,連結串列的最後一個元素是上次建立的那個。

四、還有到最後,如何使pnext為0?

你也說了,pnext在package建立的時候就賦值為0的,因此不需要再給最後一個package的pnext賦值0。

另外,虛機團上產品**,超級便宜

14樓:

定義的結構體指標只是說明這個指標是指向這個結構的,但並未給它分配記憶體空間,這就類似於宣告,只是告訴系統我這個指標是幹什麼用的。連結串列是由一個個的結點連結起來的,而每個結點都是需要記憶體空間來儲存資料的,所以你每新建一個結點,都需要開闢一個空間來儲存資料。希望對你有用~

15樓:匿名使用者

定義結構體是定義一種型別,而要用變數則要給它分配記憶體!

16樓:白天以後

這個。。就像你定義一個數:int a;這句話實際上執行的是給a分配一個整型大小的記憶體空間;就是說,你定義個什麼,都是會要開闢記憶體空間的,然後結構體是特殊一些的,它整個相當於你自己定義的一個型別,所以系統不能自動給你分配空間,你要自己寫分配它系統才懂。

分配的語句就是malloc了。

c語言中:連結串列中的指標與指標域的區別

17樓:風若遠去何人留

這是兩個不同的概念。

1 指標是c語言中的一個資料型別。在連結串列的節點中,可能包含多個指標。

2 指標域是指的連結串列中用來指向相關節點的指標,一般是下一個,對於雙向連結串列,也包括指向上一個的指標。

3 對於連結串列節點,可以分為資料域和指標域兩部分。資料域中可能包含有指標型別。指標域中必然是指標型別。

18樓:匿名使用者

連結串列中一個節點可分為兩個部分,有人說是兩個區域,一個區域中存放指標,那麼這個區域就是指標域,另一個區域存放資料,so,就叫資料域。 連結串列中的指標域中的內容就是指標,單連結串列中一個指標域存放一個指標,雙連結串列中兩個指標域各存放一個指標,其實兩者是一回事,沒什麼本質區別。

19樓:

當然是不同的概念。

你可以理解為,指標是一把鑰匙,根據鑰匙可以找到這個房間。

而房間就是指標域的概念

c 中Const用法?什麼時候需要用const?Const放在類成員函式後有什麼用?Con

醉酒逝流年 簡單的說,const代表初始化外的時候都不能修改值函式的引數寫const主要是為了防止你改變引數內容比如 void f cosnt int a 你在f的函式體裡修改了a就報錯 const在類成員函式後面表示這個函式不能用類裡面沒有const修飾的變數 c 中的類成員函式後面的const是...

c語言scanf為什麼要用取位址符

scanf 格式控制字串 位址表列 其中,格式控制字串的作用與printf函式相同,但不能顯示非格式字串,也就是不能顯示提示字串。位址表列中給出各變數的位址。位址是由位址運算子 後跟變數名組成的。例如 a b分別表示變數a和變數b的位址。這個位址就是編譯系統在記憶體中給a b變數分配的位址。在c語言...

拍攝什麼時需要用三腳架,在攝影中為什麼要用三腳架?

小牛撞樹 三角架對光線,感光度那些也有一定的影想 長時間暴光 說白一點就是快門速度慢.一般在30分之1秒內,人手持拍攝都會因為抖而造成模糊.這個時候需要用三腳架來穩定.光線不足,肯定會長時間暴光,所以手持保證不了穩定.要用架子.對於你說的感光度,在光線不好的情況下,增高感光度,也是可以保證暴光準確的...