线性链表——创建、输入、输出

#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
	char num [20];
	char name [20];
	struct student * next; //创建指针域
}STU;  //创建结构体
int create(STU *&h,int n) //需改变h,加上&,传递地址
{
	STU *p1,*p2; //p1:新指针,p2:尾指针
	for(int i=0;i<n;i++){
		p1=(STU *)malloc(sizeof(STU));
		//malloc头文件stdlib.h。malloc输出无类型的指针,所以要进行强制性转化。
		if(p1==NULL) 
		return -1;  //创建新结点失败,则返回
		scanf("%s%s",p1->num,p1->name);
		p1->next=NULL;  //使最后的指针为NULL,成为print中推出循环的要素
		
		if(i==0)  //h为头结点
			h=p1;
		else 
		p2->next=p1;  //新结点插入到链表尾
		
		p2=p1;  //尾指针指向当前的尾结点
	}
	return 1;
}  //构建线性链表
void print(STU *h)
{
	STU *p;
	for(p=h;p!=NULL;p=p->next)
	printf("%10s%10s\n",p->num,p->name);
}  //输出线性链表
int main()
{
	STU * h=NULL,* p;
	int n;
	scanf("%d",&n);
	int result;
	result=create(h,n);
	if(result==-1){
	printf("Error!");
	return 0;}
	
	print(h);
}

1、malloc 和 calloc

calloc 能初始化所分配的空间,在动态分配完后,自动初始化为0。、

2、链表的连接

在p1申请空间时,地址不为连续,需要p2连接链表。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值