讓新手更能理解的c語言單向鍊錶

2021-08-27 21:16:18 字數 1637 閱讀 5004

此文是專門詳解單項鍊表有些同學想不懂的問題。

一列火車,火車有許多的車廂,每節車廂之間有一根鍊子相連,只有通過鍊子才能連線到下一節車廂,如果鍊子斷掉了,那麼後面的車廂就找不到了。鍊錶可以說就是這樣的原理。以下是我寫的較為簡單乙個單向鍊錶:為了錄入40名同學的名字和學號(只是為了講解鍊錶的原理,沒有輸出功能和其他功能,請見諒)

#include

#include

#include

struct name;

struct name *p;

struct name *head =null;

struct name *temp;

int main()

else

printf("what your name?\n");

scanf("%s",p->name);

printf("what is your id?\n");

scanf("%d",&p->id);

temp =p;}}

如上**,先寫乙個同學資訊的結構,宣告三個結構指標變數,其中head指標為頭指標,指向火車頭的位址。p可以想成乙個臨時指標變數,為每次迴圈重新給記憶體空間和重新定義的指標變數。temp指標作用是最大的,在後面我會講。結構中next指標則為火車的鍊子,指向下乙個車廂的位址。

第一次迴圈:先給p指標分配空間,第一次錄入就相當於火車頭,火車頭丟了,那麼後面的車廂也就找不到了,這影響太大了,所以火車頭十分的重要,且火車頭要固定不變。用head指標來指向第一次錄入的結構的位址a作為火車頭,隨後固定不變。之後錄入資訊,資訊存入火車頭。這時p和head指標所指的位址是相同的,所以資訊也相同。隨後p的位址賦給temp指標,此時temp = p = head 指向同乙個位址(因為下次迴圈p因重新分配記憶體,位址會與上次迴圈p的位址不相同,所以用temp表示上次迴圈p的位址)。

第二次迴圈:給第一節車廂解鎖。重新給p指標分配空間記憶體,這時p的位址發生變化,而temp指標就發生了作用,因為temp為火車頭的位址,temp->next就等於火車頭的鍊子連著的第一節車廂等於 head ->next  指向下個結構(車廂),p指向的結構的位址賦給這一節車廂(火車頭->next),之後錄第二位同學的資訊,存入第一節車廂當中。在下次迴圈中,會用到這次資訊錄入的結構的位址,這時再次將p指向的位址賦給temp,以便下次迴圈使用這節車廂的位址來引出這節車廂的鍊子(temp->next)指向下一節車廂。

第三次迴圈:給第二節車廂解鎖。再次重新給p指標分配空間記憶體,此時temp指向的位址為第一節車廂的位址(temp->next為指向第二節車廂),而這時的ptemp->next的位址和head ->next->next的位址相同,同樣為第二節車廂的位址。錄入第三位同學的資訊。

迴圈中~~~~~~~~

迴圈完後輸出:

for(i =0;i<2;i++)

以上為鍊錶的基礎原理,希望我的講解能為不太想的通鍊錶的同學有點幫助,有不足和問題可以提出來,我們一起**哦!

C語言 單向鍊錶

1.c語言單向鍊錶 2.鍊錶的 增,刪,查,遍歷 author mr.long date 2015 12 1 15 24 26 include include 結構定義 struct node 函式定義 void printnode struct node head struct node addf...

C語言 單向鍊錶

1 單向鍊錶的定義 struct student next作為同型別指標,指向與它所在節點一樣的節點。1 建立鍊錶 int main 定義建立函式create,建立乙個有n個節點的單向鍊錶 struct student create int n ptail next null return head...

C語言單向鍊錶實現

include include typedef struct node listnode typedef listnode linklist 帶頭節點的單鏈表 初始化單鏈表只有頭節點 void initlinklist linklist linklist 建立乙個單鏈表 linklist creat...