前言
初学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;
}
运行结果: