创建单链表并输出单链表

创建一个单链表并输出单链表

①基本思路:

  • 定义一个结构体,包含数据域和指针域,前者为该结点保存的用户数据,后者为该结点保存的下一个相邻结点的地址。
  • 定义一个结点创建函数(返回head),用head指向第一个结点、p1开辟新节点、p2连接新节点。
  • 定义一个结点输出函数,用do…while形式依次打印出每一个结构体成员数据域。
  • 在main()函数中,依次调用上述函数。

②源代码:

/* 创建一个单链表,每个结点包含三个元素,学生编号、分数、保存下一个节点地址的指针 */
#include <stdio.h>
#include <stdlib.h>

#define len sizeof(struct Student)//每个结点所占用存储空间大小
struct Student
{
	long num;
	float score;
	struct Student * next;//保存下一个相邻结点的地址
};

int n;//用于记录结点个数

/*获取单链表头指针*/
struct Student *creat()
{
	/*head指向头结点,并作为最后函数返回值。*/
	/*p1负责开辟新结点(永远指向新结点)*/
	/*p2负责链接下一个相邻结点,即p2的next成员指向后面的p1(指向最后一个结点)*/
	struct Student *head,*p1,*p2;
	n=0;
	p1=p2=(struct Student *)malloc(len);//开辟第一个结点,p1和p2都指向该结点
	printf("Enter the num and the score please:\n");
	scanf("%ld,%f",&p1->num,&p1->score);//输入第一个学生的编号和成绩 
	head=NULL;
	while(p1->num!=0)//新开辟的结点中,p1->num成员数据不是0,则一直循环
	{
		n=n+1;
		if(n==1)head=p1;//只有一个结点,确定头指针
		else p2->next=p1;//有多个结点,使第一个结点的next指向第二个结点的地址
		p2=p1;//p2指向最后一个结点,为开辟下一个结点做准备
		p1=(struct Student *)malloc(len);//开辟下一个结点
		scanf("%ld,%f",&p1->num,&p1->score);//输入其它学生的编号和成绩 
	}
	p2->next=NULL;
	return(head);
}

/*输出单链表*/
void print(struct Student *head)
{
	struct Student *p;
	printf("\nThese %d nodes are:\n",n);
	p=head;
	do
	{
		printf("%ld,%f\n",p->num,p->score);//输出头结点数据 
		p=p->next;//依次输出其它结点数据 
	}while(p!=NULL);//p=NULL表明已到表尾,退出循环
 } 

void main()
{
	struct Student * head;
	head=creat();//返回头指针 
	print(head);//从头指针所指向结点开始,依次打印出其它结点数据
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值