11malloc动态建立单链表实时输入数据后遍历输出

问题描述

我们要在动态建立链表时空间才不会被浪费,每增加一个节点数据就动态为他分配一个空间,然后插入到主链表中,最后输出链表

代码解决

#include<stdio.h>
#include<stdlib.h> 
#define LEN sizeof(Student)//定义一个结构体的大小,因为每次分配一个节点的大小 
typedef struct Student{
	int num;
	float score;
	struct Student *next;
}Student;

//返回结构体类型的
Student *create(){//括号里面可以写void
	Student *head;
	Student *p1,*p2;//链表我就创建的2个指针,也可以创建2个stu_1,stu_2然后指针指向他们俩的地址 
	int n=0;
	p1=p2=(Student*)malloc(LEN);//分配空间给新建的2节点
	scanf("%ld,%f",&p1->num,&p1->score);
	head=NULL;//初始化链表 
	while(p1->num!=0){//怕p1这个节点的值不为0,那就把他加入到p2的这个主链表中 
		n=n+1;//p2的长度+1 
		if(n==1){//初始化head,把p1的值给head (head实际上就是p2的头结点) 
			head=p1;//不可以省略,head的位置很重要,需要通过它遍历 ,这里是把p1的位置给head了的 
		}else{//否则就直接连接到p2后 
			p2->next=p1;
		}
		p2=p1;//p1的当前位置给p2(其实第一轮这个时候p2和head都是在一个地方也就是p1的位置,第二轮的时候p2就是跟着p1走了,head还在第一个分配p1的那个,并且连成了长长的链表) 
		p1=(Student*)malloc(LEN);//重新为p1分配空间,走else了 
		scanf("%d,%f",&p1->num,&p1->score);
	}
	p2->next=NULL;//要把链表为指向空结束链表,不然会输出很多地址  
	
	return head; //return链表头的地址即可,而非p2 
} 

int main()
{
	Student *p;//定义指针结构体
	p=create();//函数会得到链表的第一个节点
	//在此,我们不像86那样遍历输出,只输出第一个节点的值检验动态链表是否建立成功
	//printf("%d %f",p->num,p->score);
	
	//或者遍历输出才看得到后面是否出现问题 
	do{
		printf("学号:%d成绩:%.1f\n",p->num,p->score);
		p=p->next;
	}while(p!=NULL);
	
}

结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lanmy_dl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值