IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 2020软专高级程序语言T4 -> 正文阅读

[数据结构与算法]2020软专高级程序语言T4

写出一个结构体,要求是一个单链表,里面装的是学生的学号、姓名、成绩还要把这个链表按照成绩由低到高排序。

以上得到的单链表设为单链表1。

读取一个文件里面的学生成绩等信息放到单链表2中。

将单链表1和单链表2归并排序。

#include<stdio.h>
#include<algorithm>
using namespace std;

typedef struct Student
{
	int xh;
	char name[20];
	int score;
	Student* next;
}*stu;

/*
创建结构体链表结点时用 stu xxx =(stu)malloc(sizeof(Student));
定义一个结构体链表结点指针时用  stu xxx;
*/ 

stu build1()//通过手动输入的方式建立第一个链表 
{
	stu head=(stu)malloc(sizeof(Student)); 
	int n=5;
	stu p1;
	p1=head;
	while(n--)
	{
		printf("请输入第%d个学生的信息:\n",5-n); 
		stu p=(stu)malloc(sizeof(Student));
		scanf("%d %s %d",&p->xh,&p->name,&p->score);
		p1->next=p;//head头结点不存信息,从head的下一个结点存信息 
		p1=p1->next;
	}
	p1->next=NULL;
	return head;
}

stu build2()//通过文件读入的形式建立第二个链表 
{
	stu head=(stu)malloc(sizeof(Student));
	stu p1=head;//定义尾插指针 
	
	//文件操作 
	FILE *fp;//定义文件指针 
	fp=fopen("original.txt","r");//只读打开文件,要么写绝对路径地址,要么将文件放入程序同目录 
	if(fp==NULL)//判断文件打开状态 
	{
		printf("FILE OPEN ERROR文件打开错误\n");
	}
	
	while(!feof(fp))//文件没有结束就继续读取文件 
	{
		stu p=(stu)malloc(sizeof(Student));
		fscanf(fp,"%d %s %d",&p->xh,&p->name,&p->score);
		p1->next=p;//尾插加入链表 
		p1=p1->next;
	}
	p1->next=NULL;//添加链表尾 
	return head;
}

void sort(stu head)//对第一个链表进行冒泡排序 
{
	printf("**********开始冒泡排序*******\n"); 
	
	stu p,q;
	p=head->next;
	while(p!=NULL)
	{
		q=p->next;
		while(q!=NULL)
		{
			if(p->score>q->score)
			{
				Student tmp;//先整体交换 
				tmp=*p;
				*p=*q;
				*q=tmp;
				tmp.next=p->next;//再更改next指针 
				p->next=q->next;
				q->next=tmp.next;
			}
			q=q->next;
		}
		p=p->next;
	}
}

stu merge(stu head1,stu head2)//对两个链表归并排序形成一个新的有序链表 
{
	stu p=head1->next;
	stu q=head2->next;
	
	stu newhead=(stu)malloc(sizeof(Student));//建立新链表的头结点 
	newhead->next=NULL;
	stu k=newhead;
	while(p!=NULL&&q!=NULL)
	{
		if(p->score<=q->score)//p所指的元素成绩低,将p接入新链表 
		{
			k->next=p;
			k=k->next;
			p=p->next;
		}
		else//否则将q接入新链表 
		{
			k->next=q;
			k=k->next;
			q=q->next;
		}
	}
	if(q!=NULL) 
	{
		k->next=q;
	}
	if(p!=NULL)
	{
		k->next=p;
	}
	return newhead;
}

void print(stu head)
{
	printf("******该链表中的学生输出如下******\n");
	stu p=head->next;
	while(p!=NULL)
	{
		printf("%d %s %d\n",p->xh,p->name,p->score);
		p=p->next;
	}
	printf("******该链表中的学生输出完毕******\n");
}

int main()
{
	stu head1=build1();
	stu head2=build2();
	sort(head1);
	print(head1);
	print(head2);
	stu newhead=merge(head1,head2);
	print(newhead);
	return 0;
}

/*
1 haha 100
2 heihei 200
3 dd 189
4 gg 50
5 aa 11
*/

/*
original.txt内容
191273 aaa 59
104046 bbb 78
104946 ccc 60
123129 ddd 84
345897 eee 96
345345 fff 51
346425 ggg 70
436525 hhh 65
345325 iii 89 
*/ 

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:30:50  更:2021-12-06 15:32:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:44:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码