#include<stdio.h>#include<malloc.h>typedefint DATA;struct SNode
{
DATA data;
SNode* pNext;};
SNode* g_pHead =NULL;voidAddHead(DATA data){
SNode* p =(SNode*)malloc(sizeof(SNode));
p->data = data;
p->pNext = g_pHead;
g_pHead = p;}voidAddTail(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;}voidPrint(){
SNode* p = g_pHead;while(p){
printf("%d ", p->data);
p = p->pNext;}}intmain(){
AddHead(3);AddHead(2);AddHead(1);return0;}
Student Management System_Operation in one-way linked list
Only the 按学号排序SortByNumbfunction is implemented , and the implementation is similar to sorting by name and mathematics score. You can refer to the previous article without repeating it.
Operation within a singly linked list means that the internal data of the linked list is directly sorted when sorting, which will change the content of the linked list.
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstruct SUser
{
int nNumb;char sName[20];float fMath;}DATA;struct SNode
{
DATA data;
SNode* pNext;};
SNode* g_pHead =NULL;voidAddTail(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;}voidAddHead(DATA data){
SNode* p =(SNode*)malloc(sizeof(SNode));
p->data = data;
p->pNext = g_pHead;
g_pHead = p;}voidLoad(){
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);}voidSave(){
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);}voidPrint(){
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");}voidInput(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();}intAddMenu(){
puts("1.向头部插入");puts("2.向尾部插入");puts("0.返回主菜单");int i =0;scanf_s("%d",&i);switch(i){
case1:case2:Input(i);break;}return i;}voidSortByNumb(){
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;}}intSortMenu(){
system("cls");puts("1.按学号排序");puts("2.按姓名排序");puts("3.按成绩排序");puts("0.返回主菜单");int i =0;scanf_s("%d",&i);switch(i){
case1:SortByNumb();break;case2:break;case3:break;default:return i;}Print();return i;}intMenu(){
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){
case0:break;case1:while(SortMenu());break;case2:while(AddMenu());break;}return i;}intmain(){
Load();while(Menu());return0;}