朱有鵬C語言高階---4.9.2--單鏈表--訪問單鏈表中各個節點的資料(1)
阿新 • • 發佈:2018-11-11
朱有鵬C語言高階---4.9.2--單鏈表--訪問單鏈表中各個節點的資料(1)
朱有鵬C語言高階---4.9.3--單鏈表--將建立節點的程式碼封裝成一個函式(2)
構建一個簡單的單鏈表
目標:構建一個連結串列,然後將一些資料(譬如1,2,3三個數字)儲存在連結串列中,訪問連結串列中各個節點的資料
原始碼:4.9.2.danlianbiao.c
#include <stdio.h> #include <strings.h> #include <stdlib.h> //構建一個連結串列節點 struct node { int data; //有效資料 struct node *pNext; //指向下一個節點的指標 }; int main(void) { //定義頭指標 struct node *pHeader = NULL; //每建立一個新的節點,把這個新的節點和它前一個節點關聯起來 //建立一個連結串列的節點 //申請堆記憶體,大小為一個節點的大小,並且當作一個新節點 struct node *p = (struct node *)malloc(sizeof(struct node)); if (NULL == p) { printf("malloc error.\n"); return -1; } //清理申請到的堆記憶體 bzero(p, sizeof(struct node)); //填充節點 p->data = 1; p->pNext = NULL;//將來要指向下一個節點的首地址 //實際操作時將下一個節點malloc返回的指標複製給這個 pHeader = p;//將本節點和它前面的頭指標關聯起來 /*****************************************************************/ //每建立一個新的節點,把這個新的節點和它前一個節點關聯起來 //建立一個連結串列的節點 //申請堆記憶體,大小為一個節點的大小,並且當作一個新節點 struct node *p1 = (struct node *)malloc(sizeof(struct node)); if (NULL == p1) { printf("malloc error.\n"); return -1; } //清理申請到的堆記憶體 bzero(p1, sizeof(struct node)); //填充節點 p1->data = 2; p1->pNext = NULL;//將來要指向下一個節點的首地址 //實際操作時將下一個節點malloc返回的指標複製給這個 p->pNext = p1;//將本節點和它前面的頭指標關聯起來 /*****************************************************************/ //每建立一個新的節點,把這個新的節點和它前一個節點關聯起來 //建立一個連結串列的節點 //申請堆記憶體,大小為一個節點的大小,並且當作一個新節點 struct node *p2 = (struct node *)malloc(sizeof(struct node)); if (NULL == p2) { printf("malloc error.\n"); return -1; } //清理申請到的堆記憶體 bzero(p2, sizeof(struct node)); //填充節點 p2->data = 3; p1->pNext = p2;//將來要指向下一個節點的首地址 //實際操作時將下一個節點malloc返回的指標複製給這個 /***************************************************************/ //至此建立了一個有1個頭指標+3個完整節點的連結串列 //下面是4.9.3節的程式碼 //訪問連結串列的各個節點的有效資料,這個訪問必須注意不能使用p,p1,p2,而只能使用pHeader //訪問連結串列第一個節點的有效資料 printf("node1 data : %d.\n", pHeader->data);//pHeader->data等同於p->data printf("p->data: %d.\n", p->data); //訪問連結串列第二個節點的有效資料 printf("node2 data: %d.\n", pHeader->pNext->data); printf("p1->data: %d.\n", p1->data); // pHeader->pNext->pNext->data等同於p1->data //訪問連結串列第3個節點的有效資料 printf("node3 data: %d.\n", pHeader->pNext->pNext->data); printf("p2->data: %d.\n", p2->data); return 0; }
結果:
node1 data : 1.
p->data: 1.
node2 data : 2.
p->data: 2.
node3 data : 3.
p->data: 3.