已有a、b两个链表,每个链表中的结点包括学号、成绩。//要求把两个链表合并,按学号升序排列。第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学

该程序使用C语言实现了一个功能,首先创建两个链表,然后将它们合并并按照学号number从小到大进行排序。链表节点包含学号和成绩,排序过程中同时考虑了学号和成绩的交换。最后,输出排序后的链表内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

//先创建链表 
typedef struct student{
	int number;
	int gread;
	struct student *next;
 }*node,Node; 
node creat(int n);//创建一个链表函数
void output(node1);//输出函数 
void order(node11,node22);//排序函数 

node creat(int s)
{
	node head,p;
	head=(node)malloc(sizeof(Node));
	head->next=NULL;
	node q=head; 
	int i;
	for(i=0;i<s;i++)
	{
		p=(node)malloc(sizeof(Node));
		scanf("%d%d",&(*p).number,&(*p).gread);
		p->next=q->next;
		q->next=p;
		q=p;
	}
	return (head);//返回头结点 
}
void output(node l)
{
	l=l->next;
	node q;
	while(l!=NULL)
	{
		printf("%d %d\n",l->number,l->gread);
		q=l;
		l=l->next;
		free(q);
	}
}

void order(node l1,node l2)
{//l1和l2为头结点 
	node q;//min是个节点,不是int型 
	q=l1;
	l2=l2->next; 
	while(q->next!=NULL)
	{
		q=q->next;
	}
	q->next=l2;//完成两个链表的链接
	//现在变成一个链表,开始从小到大排序
	q=l1->next;
	node min;//min是个节点,不是int型
	int n,g;//中间变量 
	node k;
	//开始按照学号number从小到大排序 
	while(q!=NULL)
	{
		k=q; 
		int t=k->number;
		min=k;
		while(k!=NULL)
		{
			if(k->number<t)
	      {
		t=k->number;//把小的节点的值给t
		 min=k;//把小的节点位置赋给min 
	        } 
	 k=k->next;	
		}
		
	int n,g;//中间变量
	n=q->number;
	q->number=min->number;
	min->number=n;
	
	 g=q->gread;
	 q->gread=min->gread;
	 min->gread=g;
	 
	 q=q->next;
	 }
	output(l1);
}

int main()
{
	int n,m;
	node head1,head2;
	scanf("%d%d",&n,&m);
	head1=creat(n);//创建A链表 
	head2=creat(m);//创建B链表 
	order(head1,head2);//链表排序
	return 0; 
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值