1. 程式人生 > >朱有鵬C語言高階---4.9.2--單鏈表--訪問單鏈表中各個節點的資料(1)

朱有鵬C語言高階---4.9.2--單鏈表--訪問單鏈表中各個節點的資料(1)

朱有鵬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.