C语言实用算法系列之学生管理系统_单向链表内操作_选择排序

单向链表实现

#include <stdio.h>
#include <malloc.h>typedef int DATA;struct SNode
{DATA data;SNode* pNext;
};
SNode* g_pHead = NULL;void AddHead(DATA data)
{SNode* p = (SNode*)malloc(sizeof(SNode));p->data = data;p->pNext = g_pHead;g_pHead = p;
}void AddTail(DATA data)
{SNode* pNew = (SNode*)malloc(sizeof(SNode));pNew->data = data;pNew->pNext = NULL;if (!g_pHead){g_pHead = pNew;return;}SNode* p = g_pHead;while (p->pNext)p = p->pNext;p -> pNext = pNew;
}void Print()
{SNode* p = g_pHead;while (p){printf("%d ", p->data);p = p->pNext;}
}int main()
{AddHead(3);AddHead(2);AddHead(1);return 0;
}

学生管理系统_单向链表内操作

  • 只实现了按学号排序SortByNumb函数,按姓名、数学成绩排序实现类似,可参考前序文章,不做赘述。
  • 单向链表内操作,意思是排序时对链表内部数据直接进行排序,会改变链表内容。
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <string.h>
#include <stdlib.h>typedef struct SUser
{int nNumb;char sName[20];float fMath;
}DATA;struct SNode
{DATA data;SNode* pNext;
};SNode* g_pHead = NULL;void AddTail(DATA data)
{SNode* pNew = (SNode*)malloc(sizeof(SNode));pNew->data = data;pNew->pNext = NULL;if (!g_pHead){g_pHead = pNew;return;}SNode* p = g_pHead;while (p->pNext)p = p->pNext;p->pNext = pNew;
}void AddHead(DATA data)
{SNode* p = (SNode*)malloc(sizeof(SNode));p->data = data;p->pNext = g_pHead;g_pHead = p;
}void Load()
{DATA data;FILE* pf = fopen("stud.lv", "r");if (!pf){puts("加载信息时失败!");return;}while (fread(&data, 1, sizeof(DATA), pf) == sizeof(DATA)){AddTail(data);}fclose(pf);
}void Save()
{SNode* p = g_pHead;FILE* pf = fopen("stud.lv", "w");if (!pf){puts("保存文件时失败!");return;}while (p){fwrite(p, 1, sizeof(p->data), pf);//fwrite(&p->data, 1, sizeof(p->data), pf);p = p->pNext;}fclose(pf);
}void Print()
{system("cls");puts("学号\t姓名\t成绩");int i = 0;SNode* p = g_pHead;while (p){printf("%d\t%s\t%0.1f\n", p->data.nNumb,p->data.sName,p->data.fMath);p = p->pNext;++i;}printf("\t总共有 %d 条记录\n", i);system("pause");
}void Input(int nDir)
{int nNumb;printf("请输入学号:");scanf_s("%d", &nNumb);DATA data;data.nNumb = nNumb;printf("请输入姓名:");scanf_s("%s", data.sName, sizeof(data.sName));printf("请输入成绩:");scanf_s("%f", &data.fMath);if (1 == nDir)AddHead(data);elseAddTail(data);Save();Print();
}int AddMenu()
{puts("1.向头部插入");puts("2.向尾部插入");puts("0.返回主菜单");int i = 0;scanf_s("%d", &i);switch (i){case 1:case 2:Input(i);break;}return i;
}void SortByNumb()
{SNode* p = g_pHead;if (!p)return;while (p->pNext){SNode* q = p->pNext;SNode* m = p;while (q){if (q->data.nNumb < m->data.nNumb)m = q;q = q->pNext;}if (m != p){DATA t = p->data;p->data = m->data;m->data = t;}p = p->pNext;}
}int SortMenu()
{system("cls");puts("1.按学号排序");puts("2.按姓名排序");puts("3.按成绩排序");puts("0.返回主菜单");int i = 0;scanf_s("%d", &i);switch (i){case 1:SortByNumb();break;case 2:break;case 3:break;default:return i;}Print();return i;
}int Menu()
{int i = 0;system("cls");puts("1.浏览所有信息");puts("2.添加信息");puts("3.删除信息");puts("4.修改信息");puts("5.查找信息");puts("6.颜色设置");puts("0.退出");printf("请选择:");scanf_s("%d", &i);switch (i){case 0:break;case 1:while (SortMenu());break;case 2:while (AddMenu());break;}return i;
}int main()
{Load();while (Menu());return 0;
}

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

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

相关文章

如何从过滤器中排除URL

默认情况下&#xff0c;过滤器不支持排除特定的URL模式&#xff0c;每当您为过滤器定义URL模式时&#xff0c;任何与该模式匹配的请求都将由过滤器无例外处理。 从过滤器中排除URL的最简单方法是将过滤器映射到非常特定的模式。 在早期开发阶段完成此操作是可行的&#xff0c;…

大林算法控制仿真实验(计控实验六simulink)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送关键词&#xff1a;计控…

C语言实用算法系列之学生管理系统_单向链表内操作_提取排序规则

代码 后续文章的排序均采用速度较快的选择排序算法。 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <stdlib.h>enum {READ_ONLY,HIDE,SYSTEM 55,TEST };typedef struct SUser {int nNumb;char sName[20];float fMath…

振铃的消除仿真实验(计控实验七simulink)

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送关键词&#xff1a;计控…

C语言实用算法系列之学生管理系统_单向链表外排序_栈内数组存储链表节点指针

代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <stdlib.h>enum {READ_ONLY,HIDE,SYSTEM 55,TEST };typedef struct SUser {int nNumb;char sName[20];float fMath; }DATA;typedef struct SNode {DATA data;SNode*…

基于触摸屏PLC的温度采集及简单控制

微信公众号&#xff1a;创享日记 发送关键词&#xff1a;plc4 免费获取完整无水印实验报告及源文件 一、实验目的 1、掌握模拟量输入输出的编写方法&#xff1b; 2、了解触摸屏画面编辑及组态的方法。 二、实验设备 三、实验步骤 1、如图所示&#xff0c;编辑触摸屏画面并定义…

OSI模型七层

OSI将计算机网络体系结构(architecture&#xff09;划分为以下七层&#xff1a; 一、应用层&#xff08;快递物品本身&#xff09; 网络服务接口&#xff0c;定义程序间通信标准&#xff0c;应用层协议&#xff08;HTTP…&#xff09; 二、表示层&#xff08;打包&#xff09…

内存heap_哪个内存更快?Heap或ByteBuffer或Direct?

内存heapJava正在成为新的C / C &#xff0c;它被广泛用于开发高性能系统。 对像我这样的数百万Java开发人员来说非常好&#xff01; 在这个博客中&#xff0c;我将分享我可以用Java完成的不同类型的内存分配的实验&#xff0c;以及从中获得什么好处。 Java中的内存分配 Java…

同网段PC通讯的过程

第一步&#xff1a;判断对方是否在同一个网段 如何判断&#xff1f; ①IP地址包括网络号和主机号&#xff0c;网络号相同就在同一个网段。 ②IP地址和子网掩码进行与运算可以得到网络号。 ③子网掩码与IP地址成对出现&#xff0c;就是用来指明IP地址哪些位是网络号。 第二步&a…

C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针

代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <stdlib.h>enum {READ_ONLY,HIDE,SYSTEM 55,TEST };typedef struct SUser {int nNumb;char sName[20];float fMath; }DATA;typedef struct SNode {DATA data;SNode*…

Java EE 8的前5个新功能

备受期待的Java Enterprise Edition 8版本拥有两个激动人心的新API&#xff08;JSON绑定1.0和Java EE Security 1.0&#xff09;以及对当前API的改进&#xff08;JAX-RS 2.1&#xff0c;Bean Validation 2.0&#xff0c;JSF 2.3&#xff0c;CDI 2.0&#xff0c;JSON-P&#xff…

ARP广播寻址风险,ARP欺骗

ARP协议的缺陷&#xff1f; ①请求与应答不需要配对&#xff0c;可以主动向任何主机发送虚假的ARP应答。 ②不校验目的端IP和MAC地址&#xff0c;收到ARP应答包就会动态更新本地ARP缓存表。 ③ARP应答包也可以广播&#xff0c;同一广播域的主机ARP缓存表都会被更改。 ARP欺骗&…

C语言实用算法系列之二级指针用法简介

一、几个知识点 内存四区&#xff1a;栈、全局&#xff08;静态&#xff09;&#xff0c;常量区&#xff0c;除此以外剩余的空间暂时不能随意使用&#xff1b;除此以外剩余的空间只要通过malloc函数申请一下&#xff0c;就可以使用了&#xff1b;申请一个堆上的单个int变量的方…

二层交换机的工作原理和风险

1、先学习&#xff0c;建立MAC地址和交换机接口号的映射关系。 2、后转发&#xff0c;查询MAC地址表&#xff0c;找到目的MAC与接口号的映射&#xff0c;单播转发。 3、如果是广播包&#xff08;目的MAC是全F&#xff09;&#xff0c;除入接口以外的所有其它接口进行转发。 …

C语言实用算法系列之行指针

代码 #include <stdio.h>void Test(double (*a)[3]) {printf("sizeof(a)%d\n", sizeof(a));printf("sizeof(*a)%d\n", sizeof(*a));printf("sizeof(a[1])%d\n", sizeof(a[1])); }void main() {double ar[2][3] { {1.0,2.1,3.2},{4.3,5.4…

解决二层单点故障及链路聚合

什么是二层单点故障&#xff1f; 交换机接口级的故障 如何解决&#xff1f; ①在交换机中间接2根线&#xff0c;线路冗余>形成环路&#xff0c;导致广播风暴、MAC地址表振荡。 ②通过STP生成树协议破坏环路&#xff0c;逻辑隔断某一个接口。 链路聚合 应用场景&#xff1…

cassandra生产监控_碎玻璃:诊断生产Cassandra问题

cassandra生产监控我刚刚在健康市场科学&#xff08;HMS&#xff09;成立二周年之际&#xff0c;我们几乎一直在这里与Cassandra一起工作。 那时&#xff0c;我们遇到的问题很少。 就像我曾经使用过的其他几种技术一样&#xff0c;Cassandra“行之有效”。 但是&#xff0c;就…

C语言实用算法系列之DOS传参“加减乘除计算器”

简介 主要采用str族函数实现字符检测&#xff0c;只能用DOS传参进行计算&#xff0c;详见运行结果。 代码 #include <stdio.h> #include <string.h> #include <stdlib.h>/* int main(int argc, char** argv) { int i0; printf("总共有%d条有效字符串…

动态主机配置协议DHCP协议

如何给主机配置IP地址&#xff1f; ①手动配置 ②DHCP 什么是DHCP&#xff1f; 动态主机配置协议&#xff08;应用层协议&#xff09; 功能&#xff1a;客户端分配IP&#xff0c;使得客户机能够利用这个IP上网 为什么需要DHCP&#xff1f; ①早期是为了解决IPv4公网不够用的…

两个Oracle JDK的故事

最近有人担心 Java开发人员现在会无意中使用错误的Oracle提供的JDK实现&#xff08;从JDK 11开始 &#xff09;&#xff0c; Oracle提供了开放源代码OpenJDK的构建 &#xff0c;并且还提供了主要基于OpenJDK源代码的商业JDK构建。 下表比较并对比了Oracle提供的两个JDK版本&am…