日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2023/12/2 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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* pNext; }NODE,*PNODE;SNode* g_pHead = NULL;void Save(); void Print(); //void SortByNumb();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 Modify() {int nNumb;printf("請輸入要修改的學號:");scanf_s("%d", &nNumb);SNode* p = g_pHead;while (p){if (p->data.nNumb == nNumb)break;p = p->pNext;}if (!p){puts("你輸入的學號不存在!");system("pause");return;}printf("%d\t%s\t%0.1f\n", p->data.nNumb, p->data.sName, p->data.fMath);printf("請輸入姓名和成績:");scanf_s("%s", p->data.sName, sizeof(p->data.sName));scanf_s("%f", &p->data.fMath);Save();Print(); }int DelNumber(int nNumb) {SNode* p = g_pHead, *p1 = NULL;if (!p)return 0;if (p->data.nNumb == nNumb){g_pHead = p->pNext;free(p);return 1;}while (p){if (p->data.nNumb == nNumb){p1->pNext = p->pNext;free(p);return 1;}p1 = p;p = p->pNext;}return 0; }void Delete() {char c;do{int nNumb;printf("請輸入要刪除的學號:");scanf_s("%d", &nNumb);if (DelNumber(nNumb)){Save();Print();}else{puts("你輸入的學號不存在!");}printf("是否繼續刪除?[y/n]");//setbuf(stdin, NULL);rewind(stdin);c = getchar();} while (c == 'y' || c == 'Y'); }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; }int Judge(SNode* q, SNode* m, int nIndex) {if (1 == nIndex)return q->data.nNumb < m->data.nNumb;if (2 == nIndex)return strcmp(q->data.sName, m->data.sName) < 0;if (3 == nIndex)return q->data.fMath > m->data.fMath;return 0; }/* void Sort(int nIndex) {SNode* p = g_pHead;if (!p)return;while (p->pNext){SNode* q = p->pNext;SNode* m = p;while (q){if (Judge(q,m,nIndex))m = q;q = q->pNext;}if (m != p){DATA t = p->data;p->data = m->data;m->data = t;} p = p->pNext;} } */void PrintS(SNode* *ps) {system("cls");puts("學號\t姓名\t成績");int i = 0;while (ps[i]){SNode* p = ps[i]; // ps[i]都是SNode*類型printf("%d\t%s\t%0.1f\n", p->data.nNumb, p->data.sName, p->data.fMath);++i;}printf("\t總共有 %d 條記錄\n", i);system("pause");}void Sort(int nIndex) {SNode* p = g_pHead;if (!p)return;//SNode* ps[100] = { 0 };int n = 0, i = 0;while (p){p = p->pNext;++n;}SNode* *ps = (SNode**)malloc(sizeof(SNode*)*(n+1)); // 申請堆上數組存儲鏈表節點指針p = g_pHead;while (p){ps[i] = p;p = p->pNext;++i;}ps[i] = NULL;i = 0;while (i < n-1){int j = i + 1;int m = i;while (j < n){//if (ps[j]->data.nNumb < ps[m]->data.nNumb)if(Judge(ps[j],ps[m],nIndex))m = j;++j;}if (m != i){SNode* t = ps[i];ps[i] = ps[m];ps[m] = t;}++i;}PrintS(ps);free(ps); }int SortMenu() {system("cls");puts("1.按學號排序");puts("2.按姓名排序");puts("3.按成績排序");puts("4.不排序");puts("0.返回主菜單");int i = 0;scanf_s("%d", &i);switch (i){case 1:case 2:case 3:Sort(i);break;case 4:Print();default:return i;}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;case 3:Delete();break;case 4:Modify();break;}return i; }int main() {Load();//int i = SYSTEM;//int j = TEST;//int k = HIDE;while (Menu());return 0; }

總結

以上是生活随笔為你收集整理的C语言实用算法系列之学生管理系统_单向链表外排序_堆内数组存储链表节点指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。