關於鍊錶中指標的學習

2022-07-29 02:51:11 字數 1011 閱讀 2264

昨天晚上在學習資料結構關於鍊錶的部分,理解鍊錶沒什麼難度,但是當自己動手寫程式的時候各種問題就出來了,感覺邏輯很正常但是總得不到正確的結果。

首先自己對c語言指標理解的不是很深入,在定義鍊錶節點的結構體時,定義了乙個指標型別的變數指向結構體如**所示:  

1  typedef int

status;

2   typedef struct

nodenode,*linklist;

然後在main函式中定義乙個指向結構體的指標變數如 linklist l;

在main函式之外宣告乙個建立鍊錶的函式

1

void create_list(linklist l1,int

n)

11   }

create_list函式採用的事頭插法新增鍊錶節點,經過main 函式的呼叫生成乙個鍊錶。但是問題來了當我在使用列印鍊錶的函式進行列印時,鍊錶l是沒有值的。我一直想不通,因為上述函式的邏輯是沒有錯的。為什麼會出這樣的問題呢。我開始從main函式進行分析,首先定義linklist l ;然後呼叫create_list函式,把指標l傳給create_list中的形參l1(指標型別),指標l和指標l1這兩個變數指向同乙個位址,但實質上還是兩個指標變數,他們在記憶體中有自己的位置。當執行  l1 = (linklist)malloc(sizeof(node));這條語句時l1將指向乙個新節點的位址,這時l1和l中的儲存的位址就已經不同了,接下來的操作都與指標l沒有任何關係了,這就是問題的所在。如何解決這個問題呢??

我們需要將指標l的位址(不是l指向的位址)傳過去,這樣create_list函式中形參l1中儲存的就是指標l的位址即指向指標的指標。之後用(*l1)的結果就是指向指標l指向的位址,相當於加了一層保護。**如下:

1

void create_list(linklist *l1,int

n) 12}

13main函式如下:

14int

main()

關於鍊錶 指標 變數的理解

是乙個整體,它是用於指向結構體 c 中的class等含有子資料的指標用來取子資料。換種說法,如果我們在c語言中定義了乙個結構體,然後申明乙個指標指向這個結構體,那麼我們要用指標取出結構體中的資料,就要用到 舉個例子 struct data 定義結構體 struct data p 定義結構體指標 st...

刪除鍊錶中指定的元素

1 新建鍊錶 2 輸出鍊錶 3 刪除鍊錶中的指定元素 include include include include test1.h 建立乙個結構體 typedef struct node node int count 0 記錄鍊錶的長度 node initlist 在迭代插入新的節點的過程中一直使...

刪除鍊錶中指定節點

刪除鍊錶中指定節點 思路 利用其他結構 這裡利用棧結構 存放鍊錶中除要刪除的節點外的其他節點。依次將鍊錶元素放入棧中,當遇到要刪除的元素時跳過,最後將棧中元素重新連線成鍊錶。具體 public class removevalue public static node remove node head...