单链表:学生信息管理系统

news2024/11/16 21:34:27

一、头文件

#ifndef __LINK_H__
#define __LINK_H__
#include <myhead.h>
#define MAX 30
// 建立学生结构体
typedef struct student
{
	int id; //学号
	char name[20]; //姓名
	float score; //分数
}stu;

typedef struct node
{
	union{
		int len;
		stu data;
	};
	struct node * next;
}Link, *Plink;

/**********函数声明**********/
//创建头结点
Plink set_up_link();
//判空
int empty(Plink L);
//1.输入学生信息
stu input_student(stu * people);
//2.头插法输入
void head_sert(Plink L, stu people);
//3.遍历单链表
void output_link(Plink L);
//
int input_sub();
//4.任意位置插入一个完整学生信息
void any_sert(Plink L, int sub, stu  key);
//5.任意位置删除一个完整学生信息
void any_delete(Plink L, int sub);
//6.单链表逆置
void reverse_link(Plink L);
//7.按照学生成绩排序
void bubble_sort(Plink L);

#endif

二、功能函数

0.准备创建节点

//1.创建头结点
Plink set_up_link()
{
	Plink L = malloc( sizeof(Link) );
	if(NULL == L){
		printf("创建失败!\n");
		return NULL;
	}
	L->len = 0;
	L->next = NULL;
	return L;
}

//判空
int empty(Plink L)
{
	if(NULL == L)
	{
		printf("创建失败!\n");
		return 1;
	}
	return 0;
}

1.头插法输入

//输入学生信息
stu input_student(stu * people)
{
	printf("请输入学生信息:\n");
	printf("学号:");
	scanf("%d", &people->id);
	printf("姓名:");
	scanf("%s", people->name);
	printf("分数:");
	scanf("%f", &people->score);
	return *people;
}

//2.头插法输入
void head_sert(Plink L, stu people)
{
	if(empty(L)) return;
	Plink p = malloc(sizeof(Link));
	p->data = people;
	p->next = L->next;
	L->next = p;
	L->len++;

}


2.遍历单链表

//3.遍历单链表
void output_link(Plink L)
{
	Plink t = L;
	for(int i=0; i<L->len; i++){
		printf("学号%d\t姓名%s\t分数%.2f\n",t->next->data.id, t->next->data.name, t->next->data.score);
		t = t->next;
	}
}


3.任意位置插入一个完整学生信息

//请输入插入/删除位置
int input_sub()
{
	int sub;
	printf("请输入插入/删除位置:");
	scanf("%d",&sub);
	return sub;
}

//4.任意位置插入一个完整学生信息
void any_sert(Plink L, int sub, stu key)
{
	if(empty(L) || sub<1 || sub>L->len+1) return;
	Plink t = L;
	for(int i=1; i<sub; i++){
		t = t->next;
	}
	Plink p = malloc(sizeof(Link));
	p->data = key;
	p->next = t->next;
	t->next = p;
	L->len++;
}


4.任意位置删除一个完整学生信息

//5.任意位置删除一个完整学生信息
void any_delete(Plink L, int sub)
{
	if(empty(L) || sub<1 || sub>L->len) return;
	Plink t = L;
	for(int i=1; i<sub; i++){
		t = t->next;
	}
	Plink Q = t->next;
	t->next = t->next->next;
	L->len--;
	
	free(Q);
	Q = NULL;
}


5.单链表逆置

//6.单链表逆置
void reverse_link(Plink L)
{
	if(empty(L)) return;
	Plink t = L->next;
	Plink q = t->next;
	while(q!=NULL){
		t->next = q->next;
		q->next = L->next;
		L->next = q;
		q = t->next;
	}
}


6.按照学生成绩排序

//7.按照学生成绩排序
void bubble_sort(Plink L)
{
	if(empty(L)) return;
	for(int i=0; i<L->len; i++){
		for(Plink j=L->next; j->next != NULL; j=j->next){
			if( j->data.score > j->next->data.score ){
				int temp = j->data.score;
				j->data.score = j->next->data.score;
				j->next->data.score = temp;
			}
		}
	}
}

三、主函数

#include "link.h"

int main(int argc, const char *argv[])
{	
	//创建头结点
	Plink L = set_up_link();

	while(1){
		printf("\t\t===学生信息管理系统===\n");
		printf("\t\t1.头插法输入\n");
		printf("\t\t2.遍历单链表\n");
		printf("\t\t3.任意位置插入一个完整学生信息\n");
		printf("\t\t4.任意位置删除一个完整学生信息\n");
		printf("\t\t5.单链表逆置\n");
		printf("\t\t6.按照学生成绩排序\n");
		printf("\t\t0.退出\n");

		int choice;
		printf("请选择:");
		scanf("%d",&choice);

		switch(choice){
		case 1:	//1.头插法输入
			int n;
			printf("请输入学生人数:");
			scanf("%d",&n);
			stu people;
			for(int i=0; i<n; i++){
				input_student(&people);
				head_sert(L,people);
			}
		break;
		case 2: //2.遍历单链表
			output_link(L);
		break;

		case 3: //3.任意位置插入一个完整学生信息
			int sub0 = input_sub();
			stu key = input_student(&people);
			any_sert(L, sub0, key);
			output_link(L);
		break;

		case 4://4.任意位置删除一个完整学生信息
			int sub1 = input_sub();
			any_delete(L , sub1);
			output_link(L);
		break;
	
		case 5: //5.单链表逆置
			reverse_link(L);
			output_link(L);
		break;
		
		case 6: //6.按照学生成绩排序
			bubble_sort(L);
			output_link(L);
			break;

		case 0: //0.退出
			return 0;
		default :
			printf("请重新选择:");
			scanf("%d",&choice);
		break;
		}
	}
    free(L);
    L = NULL;
	return 0;
}

四、结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2159858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

玄机--哥斯拉流量

1、黑客的ip 过滤http&#xff0c;观察哪个ip一直在发送请求包 2、什么漏洞 因为是哥斯拉&#xff0c;那么黑客在连接成功之前一定上传这个木马文件到服务端 hello.jsp是木马文件&#xff0c;过滤http contains “hello.jsp” 最早是PUT这个方法 3、文件名 hello.jsp 保存…

让AI激发创作力:OpenAI分享5位专业作家利用ChatGPT写作的案例技巧

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

GPU硬件如何实现光栅化?

版权声明 本文为“优梦创客”原创文章&#xff0c;您可以自由转载&#xff0c;但必须加入完整的版权声明文章内容不得删减、修改、演绎本文视频版本&#xff1a;见文末 引言 大家好&#xff0c;我是老雷&#xff0c;今天我想从GPU硬件原理出发&#xff0c;给大家分享在图形渲…

JS防抖和节流函数

节流和防抖函数的定义 防抖&#xff1a;只有在最后一次事件发生后的一定时间间隔内没有新的事件触发时&#xff0c;才执行相应的处理函数。节流&#xff1a;在规定的时间间隔内最多只能执行一次相应的处理函数。 效果图 示例图 示例图运行结果如下&#xff1a; 代码 &l…

远程升级,你成功了吗?

最近又遇到了远程升级失败的情况&#xff0c;而且是不明原因的多次接连失败。。。 事情是这样的&#xff1a;最近有客户反馈在乡村里频繁出现掉线的情况。通过换货、换SIM卡对比排查测试&#xff0c;发现只有去年5月22号采购的那批模块在客户环境附近会出现掉线的情况&#xf…

【深度学习】03-神经网络3-1梯度下降网络优化方法

每一条线是一个权重&#xff0c;每个神经元由一个加权和还有一个 激活函数组成。每一层可以理解是一个函数&#xff0c;最终形成一个复合函数&#xff0c;因此求梯度的时候&#xff0c;是一层一层的求解&#xff0c;所以叫做反向传播。 只会考虑当前数据之前的数据&#xff0c;…

潮玩宇宙大逃杀宝石游戏搭建开发

潮玩宇宙大逃杀的开发主要涉及以下方面&#xff1a; 1. 游戏概念和设计&#xff1a; 核心概念定义&#xff1a;确定以潮玩为主题的宇宙背景、游戏的基本规则和目标。例如&#xff0c;玩家在宇宙场景中参与大逃杀竞技&#xff0c;目标是成为最后存活的玩家。 玩法模式设计&a…

k8s上安装prometheus

一、下载对应的kube-prometheus源码 github地址&#xff1a;GitHub - prometheus-operator/kube-prometheus: Use Prometheus to monitor Kubernetes and applications running on Kubernetes 1&#xff09;进入目录 [rootk8s-master ~]# cd kube-prometheus [rootk8s-master…

商城小程序源码搭建部署,商城购物小程序开发流程(php框架)

关于商城小程序 商城小程序作为一种基于移动互联网的在线购物平台&#xff0c;商家可以上架所销售的产品&#xff0c;定价&#xff0c;以及营运营的在线售货平台。买家无需下载应用&#xff0c;在小程序搜索打开即可浏览下单商品。 技术栈 前端: vue uniapp 后端&#xff1a…

嵌入式Linux学习笔记(7)-Socket网络编程

一、什么是Socket网络编程 Socket是一种抽象的编程接口&#xff0c;可以用于在不同主机之间进行数据通信。Socket API提供了一系列函数来创建、连接、发送和接收数据等操作。嵌入式 Linux 系统中的 Socket 网络编程是指在嵌入式系统中使用 Socket API 进行网络通信。 Socket 网…

HTTP协议1.1请求头和keep-alive

请求头分类 End-to-end&#xff08;端对端&#xff09; 必须全部带给目标服务器&#xff0c;不会被中途变化或去掉 Hop-by-hop&#xff08;逐跳头&#xff09; 比如客户端发请求&#xff0c;要路过代理(例如Nginx)&#xff0c;头可以被自动删掉&#xff0c;来到真正服务器上…

vue/配置axios(前后端数据连通/api接口的调用)

1.创建apis文件 2.写入调用的api地址且暴露出去。 import httpInstance from /utils/http;export function getHomeNav() {return httpInstance({url: http://10.0.11.91:91/dailyreport/getdailyreportall,}) }3.创建文件编写拦截器 代码部分 //axios基础封装 import axio…

Thinkphp5x远程命令执行 靶场攻略

环境配置 靶场&#xff1a;vulhub/thinkphp/5-rce docker-compose up -d #启动环境 漏洞复现 1.访问靶场&#xff1a;http://172.16.1.198:8080/ 2.远程命令执⾏ POC&#xff1a; ?sindex/think\app/invokefunction&functioncall_user_func_array&vars[0]system…

Bytebase 2.23.0 - 支持 Entra (Azure AD) 用户/组同步

&#x1f680; 新功能 支持从 Entra ID&#xff08;前 Azure AD&#xff09;同步用户和群组。 支持 CockroachDB。 支持项目级别的默认备份设置&#xff0c;包含自动启用和跳过错误选项。 SQL 编辑器支持实时语法检查。 支持配置密码限制策略。 &#x1f514; 重大变更 分类…

初试AngularJS前端框架

文章目录 一、框架概述二、实例演示&#xff08;一&#xff09;创建网页&#xff08;二&#xff09;编写代码&#xff08;三&#xff09;浏览网页&#xff08;四&#xff09;运行结果 三、实战小结 一、框架概述 AngularJS 是一个由 Google 维护的开源前端 JavaScript 框架&am…

输电线塔目标检测数据集yolo格式该数据集包括2644张输电线塔高清图像,该数据集已经过yolo格式标注,具有完整的txt标注文件和yaml配置文件。

输电线塔目标检测数据集yolo格式 该数据集包括2644张输电线塔高清图像&#xff0c;该数据集已经过yolo格式标注&#xff0c;具有完整的txt标注文件和yaml配置文件。 输电线塔目标检测数据集 数据集名称 输电线塔目标检测数据集&#xff08;Transmission Tower Object Detecti…

从视觉到现实:掌握计算机视觉技术学习路线的十大步骤

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于【计算机视…

【第十五章:Sentosa_DSML社区版-机器学习之关联规则】

目录 15.1 频繁模式增长 15.2 PrefixSpan 【第十五章&#xff1a;Sentosa_DSML社区版-机器学习之关联规则】 机器学习关联规则是一种用于发现数据集中项之间有趣关系的方法。它基于统计和概率理论&#xff0c;通过分析大量数据来识别项之间的频繁共现模式。 15.1 频繁模式增…

Linux-DHCP服务器搭建

环境 服务端&#xff1a;192.168.85.136 客户端&#xff1a;192.168.85.138 1. DHCP工作原理 DHCP动态分配IP地址。 2. DHCP服务器安装 2.1前提准备 # systemctl disable --now firewalld // 关闭firewalld自启动 # setenforce 0 # vim /etc/selinux/config SELINU…

学生管理系统模块化编程

项目介绍&#xff1a;Java基础mysql的一个简单练习 一.数据库 二.项目结构 lib下的jar包下载地址&#xff1a;Maven Repository: mysql mysql-connector-java (mvnrepository.com) 1.db.properties drivercom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/student?u…