单向链表实现

#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;
}

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

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

    代码 后续文章的排序均采用速度较快的选择排序算法. #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <strin ...

  2. C语言实用算法系列之学生管理系统_对整个结构体操作_选择排序_提取排序规则

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

  3. C语言实用算法系列之学生管理系统_对整个结构体操作_冒泡排序_提取排序规则

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

  4. C语言实用算法系列之学生管理系统_对整个结构体操作_冒泡排序

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> void Save();str ...

  5. 【终极完美高效】C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针_函数指针数组

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

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

    函数指针简介 #include <stdio.h>int add(int a, int b) {return a + b; }int dec(int a, int b)

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

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

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

    代码 #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <string.h> #include <st ...

  9. 【总结】C语言实用算法系列之知识点梳理_附学生管理系统各模块代码

    1.内存四区特点 a)全局区变量空间缺省每个字节为00,栈空间缺省是cc,堆缺省是cd b)堆.全局区(静态区).字符串常量区,与栈区空间的位置距离很大,栈区访问速度可能最快: 2.C语言与C++编译 ...

最新文章

  1. docker 构建错误 E: List directory /var/lib/apt/lists/partial is missing.-Acquire (13: Permission denied)
  2. [转]C++结构体|类 内存对齐详解
  3. C# 与 Unity 同名函数
  4. pikachu皮卡丘靶机系统安装~
  5. 洛谷 P1955 [NOI2015]程序自动分析(沙雕题)
  6. mongdb 群集_通过对比群集分配进行视觉特征的无监督学习
  7. PYQT4 Python GUI 编写与 打包.exe程序
  8. oxm java_使用JAXB2.0实现OXM
  9. JavaScrip节点属性-访问子节点
  10. 实现图片抠图,拖拽验证功能
  11. 宝塔Linux面板如何进入,云服务器怎么进入宝塔面板
  12. Bean Validation
  13. .com.cn域名是什么?.com.cn域名有哪些优势?
  14. UPC 2020年夏混合个人训练第八十一场
  15. 数字华容道(C++)
  16. 链表实现学生信息管理系统
  17. android 蒲公英 类似平台,Jenkins之android APP打包上传蒲公英平台
  18. php 7.3 新特性
  19. 实用的单片机接反电路,再也不怕电源接反了
  20. NTP时间戳和UTC时间戳互转及其原理

热门文章

  1. 函数接口– Java 8中java.util.function包中的函数接口
  2. 具有Aspects的Java中的Mixin –用于Scala特性示例
  3. 谁在偷你的记忆? 应用服务器版
  4. 使普通的旧Java OSGi兼容
  5. Linux 中 ctime,mtime,atime 的区别
  6. oracle system用户创建job 其他用户,oracle创建表空间、用户和表以及sys和system的区别...
  7. cpu占用100_Java项目服务器cpu占用100%解决办法
  8. python内存管理可以使用del_Python深入学习之内存管理
  9. 【lua学习】7.环境
  10. mysql数据导出不完正_【MySQL】mysqldump 导出数据 常见问题