重温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;

发布了65 篇原创文章 · 获赞 36 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_40860986/article/details/100110927