链表的理解——造孽的儿子、操碎心的老妈和人狠话不多的老爸

前言

初学C语言,请大佬多提宝贵意见,感激不尽。欢迎各位初学者前来交流。


# include<stdio.h>
# include<malloc.h>

struct Student
{
	char name[20];
	int age;
	float score;
	struct Student *pNext;								//下一个 商家 的门牌号
};
typedef struct Student STU;		//简写

int main(void)
{
	int len, i;	//len:“商家”的个数

	printf("Please enter the number of students\n");
	printf("len = %");
	scanf("%d", &len);

	STU head;		//老子
	STU *tail;		//老妈
	STU *p;			//儿子

	head.pNext = NULL;  //用来存放儿子造孽的门牌号,一开始都是好孩子,没有造孽,所以为“空-NULL”。(造孽:儿子到“商家”吃“霸王餐”)
	tail = &head;	//一开始老妈在老爸这,和老爸商量着,该怎么打儿子,(打不死往死里打)。
//赋值
	printf("Please enter the information of students\n");
	for(i=0; i<len; i++)
	{
		p = (STU *)malloc(sizeof(STU));		//儿子得有能造孽的店铺啊
		printf("Please enter information for the No.%d student ", i+1);
		scanf("%s%d%f",p->name, &p->age, &p->score);	//可直接输入。	


//以下三句代码,一定会有。顺序的话,前两句可以调换。
		p->pNext = NULL;		//吃累了,歇一会。
		tail->pNext = p;			//老妈告诉老爸,儿子造孽的房间号	这里的意译只适用于头结点和首节点的联系,从首节点即往后,老妈只会在店铺里留下下一个被糟蹋的店铺的房间号,让老爸自己去看。
		tail = p;				//老妈功成名就,来到儿子刚造完孽的店铺,“等待”儿子是否还会继续造孽。
	}

	p = head.pNext ;				
	while(p != NULL)
	{
		printf("name = %-15s,age = %-5d, score = %-5f\n", p->name,p->age,p->score);
		p = p->pNext;
	}

//释放动态分配
	p = head.pNext;
	while(p != NULL)
	{
		head.pNext = p->pNext;		//头结点里的指针现在指向与他相隔一个变量的结构体(如果头结点是第一个,那么现在他已经指向了第三个)
		free(p);	//释放第二个
		p = head.pNext;		//此时的p已经指向了头结点的后一个,也就是曾经的第三个(曾经的第三个变成了现在的第二个,原来的第二个已经释放了)
	
	}
	return 0;
	return 0;
}

运行结果:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值