重溫C語音 | 鏈表1(靜態鏈表)

鏈表概述

鏈表的作用:當一些成員數量不缺定的時候,希望可以通過上一個結點而找到下一個結點。需要使用鏈表。
鏈表在哪些地方進行應用?
在這裏插入圖片描述

節點的構成:數據域+指針域。
鏈表的物理拓撲結構:
在這裏插入圖片描述
鏈表的節點表示:結構體表示。
示例:

struct POINT{
	//數據域
	int vara;
	char varb;
	float varc;
	double vard;
	
	//指針域
	struct POINT *next;
};//單向鏈表的節點構造的數據類型

鏈表根據方向:單向鏈表、雙向鏈表、環形鏈表。
鏈表根據存儲方式:靜態鏈表、動態鏈表。

靜態鏈表

鏈表長度已經固定不能發生改變。一般情況下使用結構體數組表示靜態鏈表。
單向靜態鏈表
方向只有一個:從鏈表頭到鏈表尾部。
有頭節點與尾節點的概念。
頭節點的特徵:頭節點一般不存儲數據。只使用指針域。
尾節點的特徵:數據域要存儲數據。指針域爲NULL。
構成示例:

struct POINT{
	//數據域
	int vara;
	char varb;
	float varc;
	double vard;
	//指針域
	struct POINT *next;
};

int main(void)
{
	struct POINT point_buff[5] = {0};
	
	//將節點連接起來構成鏈表
	point_buff[0].next = &point_buff[1];//頭節點的指針域存儲下一個節點的門牌號
	point_buff[1].next = &point_buff[2]; //子節點的指針域存儲下一個子節點的門牌號
	point_buff[2].next = &point_buff[3];
	point_buff[3].next = &point_buff[4];
	point_buff[4].next = NULL;//尾節點的指針域存NULL
	
	return 0;
}

遍歷鏈表:將鏈表中所有的數據全部輸出到屏幕。

  1. 向鏈表中存儲數據----寫操作
struct POINT{
	//數據域
	int vara;
	char varb;
	float varc;
	double vard;
	
	//指針域
	struct POINT *next;
};

int main(void)
{
	struct POINT point_buff[5] = {0};
	struct POINT *point = point_buff;
	
	//將節點連接起來構成鏈表
	point_buff[0].next = &point_buff[1];//頭節點的指針域存儲下一個節點的門牌號
	point_buff[1].next = &point_buff[2];
	point_buff[2].next = &point_buff[3];
	point_buff[3].next = &point_buff[4];
	point_buff[4].next = NULL;//尾節點的指針域存NULL
	
	point = point->next; 
	
	while(point != NULL)//當前這個鏈表沒有結束
	{
		printf("請輸入整形、字符型、單精度、雙精度數據:");
		scanf("%d,%c,%f,%lf", &point->vara, &point->varb, &point->varc, &point->vard);
		
		point = point->next; 
	}
	
	
	return 0;
}

  1. 將鏈表中的數據輸出----讀操作
struct POINT{
	//數據域
	int vara;
	char varb;
	float varc;
	double vard;
	
	//指針域
	struct POINT *next;
};

int main(void)
{
	struct POINT point_buff[5] = {0};
	struct POINT *point = point_buff;
	
	//將節點連接起來構成鏈表
	point_buff[0].next = &point_buff[1];//頭節點的指針域存儲下一個節點的門牌號
	point_buff[1].next = &point_buff[2];
	point_buff[2].next = &point_buff[3];
	point_buff[3].next = &point_buff[4];
	point_buff[4].next = NULL;//尾節點的指針域存NULL
	
	point = point->next; 
	
	while(point != NULL)//當前這個鏈表沒有結束
	{
		printf("請輸入整形、字符型、單精度、雙精度數據:");
		scanf("%d,%c,%f,%lf", &point->vara, &point->varb, &point->varc, &point->vard);
		
		point = point->next; 
	}
	
	point = point_buff;//回到鏈表的頭
	point = point->next;//越過頭節點----頭節點不存儲數據
	
	while(point != NULL)//當前這個鏈表沒有結束
	{
		printf("%d\t%c\t%f\t%lf\r\n", point->vara, point->varb, point->varc, point->vard);
		
		point = point->next; 
	}
	
	return 0;
}

小練習:用函數實現;錄入n個學生信息(不超過10個),如果有xiaoming這個同學,將xiaoming同學信息輸出。學生信息包括:name、age、yuwencj、shuxuecj、waiyucj;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章