1. 程式人生 > >朱有鵬C語言高階---4.9.3--單鏈表--將建立節點的程式碼封裝成一個函式(2)

朱有鵬C語言高階---4.9.3--單鏈表--將建立節點的程式碼封裝成一個函式(2)

 

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

朱有鵬C語言高階---4.9.3--單鏈表--將建立節點的程式碼封裝成一個函式(2)

 

 

原始碼:4.9.3danlianbiao2.c

#include <stdio.h>
#include <strings.h>
#include <stdlib.h>

//構建一個連結串列節點
struct node
{
	int data;		//有效資料
	struct node *pNext;	//指向下一個節點的指標
};

//作用:建立一個連結串列的節點
//返回:指標,指標指向我們本函式新建立的一個節點的首地址
struct node * create_node(int data)
{
	struct node *p = (struct node *)malloc(sizeof(struct node));
	if (NULL == p)
	{
		printf("malloc error.\n");
		return NULL;
	}
	//清理申請到的堆記憶體
	bzero(p, sizeof(struct node));
	//填充節點
	p->data = data;
	p->pNext = NULL;//將來要指向下一個節點的首地址
			//實際操作時將下一個節點malloc返回的指標複製給這個
	return p;
}

int main(void)
{
	//定義頭指標
	struct node *pHeader = NULL;	
	
	pHeader = create_node(1);	
	//將本節點和它前面的頭指標關聯起來

	pHeader->pNext = create_node(2);
	//將本節點和它前面的頭指標關聯起來

	pHeader->pNext->pNext = create_node(3);
	//將來要指向下一個節點的首地址

	//至此建立了一個有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.
node2 data: 2.
node3 data: 3.