|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
只看一下sort函数就行
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct _STU
- {
- char num[10];
- char name[10];
- int s1,s2,s3;
- int sall;//S1+S2+S3
- struct _STU* pNext;
- } STUNODE;
- //声明链表的头和尾
- STUNODE* g_pHead = NULL; //O
- STUNODE* g_pEnd = NULL;
- //排序
- void sort();
- //清空链表,防止内存泄漏
- void freenode()
- {
- STUNODE* pTemp = g_pHead;
- while (g_pHead != NULL)
- {
- //记录节点
- pTemp = g_pHead;
- //向后移动了一个
- g_pHead = g_pHead->pNext;
- //删除节点
- free(pTemp);
- }
- }
- //菜单
- void Printmnue()
- {
- printf("1.添加学生数据\n");
-
- printf("3.排序\n");
-
- printf("6.显示学生信息\n");
-
- printf("7.退出\n");
- }
- //添加学生
- void add(char *num,char *name,int s1,int s2,int s3)
- {
- //创建一个节点
- STUNODE* pTemp =(STUNODE*)malloc(sizeof (STUNODE));
- //第一步,检验参数的合法性
- if (NULL == num || NULL == name || s1 < 0||s2<0||s3<0)
- {
- printf ("学生信息输入错误!\n");
- return ;
- }
- //节点成员符初始值
- strcpy(pTemp->num, num);
- strcpy(pTemp->name, name);
- pTemp->s1 = s1;
- pTemp->s2 = s2;
- pTemp->s3 = s3;
- pTemp->pNext = NULL;
- //接在链表上
- if (NULL == g_pHead || NULL == g_pEnd)
- {
- g_pHead = pTemp;
- //g_pEnd = pTemp;
- }
- else
- {
- g_pEnd->pNext = pTemp; //链接
- //g_pEnd = pTemp; //向后移动
- }
- g_pEnd = pTemp;
- }
- //显示所有学生
- void show()
- { //声明指针
- STUNODE* pTemp = g_pHead;
- while (pTemp != NULL)//遍历链表
- {
- printf ("学号:%s\t, 姓名:%s\t, 语文:%d\t, 数学:%d\t, 英语:%d\t\n", pTemp->num, pTemp->name, pTemp->s1, pTemp->s2, pTemp->s3);
- //向下走一步
- pTemp = pTemp->pNext;
- }
- }
- int main()
- {
- int choice=-1; //初始化
- char num[10] = {'\0'};
- char name[10] = {'\0'};
- int s1= -1;
- int s2= -1;
- int s3= -1;
- int sum;//=s1+s2+s3;
- int flag= 1;
- STUNODE* pTemp = NULL;
- Printmnue();
-
- while (flag)
- {
-
- printf("请输入你的选择(1-7)\n");
- scanf("%d", &choice);
- switch (choice)
- {
- case 1:
- //尾添加
- printf ("输入学号:");
- scanf ("%s", num);
- printf ("输入姓名:");
- scanf ("%s", name);
- printf ("输入语文成绩:");
- scanf ("%d", &s1);
- printf ("输入数学成绩:");
- scanf ("%d", &s2);
- printf ("输入英语成绩:");
- scanf ("%d", &s3);
- add(num, name, s1,s2,s3);
- break;
- case 3:
- //排序
- sort();
- break;
-
- case 6:
- //显示所有学生
- show();
- break;
- case 7:
- //退出
- flag=0;
- break;
-
- }
-
- }
-
- //释放链表
- freenode();
- system("pause");
- return 0;
- }
- //排序
- void sort()
- {
- STUNODE* pTemp = g_pHead;
- char num[10] = {0};
- char name[10] = {'\0'};
- int s1,s2,s3;
- int sum;
- STUNODE *p,*q;
- for(p=g_pHead;p!=NULL;p=p->pNext)
- {
- for(q=p;q!=NULL;q=q->pNext)
- {
- if((q->s1 +q->s2 +q->s3 )<(q->pNext->s1 +q->pNext->s2 +q->pNext->s3 ))
- {
- s1=q->s1 ,q->s1=q->pNext->s1,q->pNext->s1=s1;
- s2=q->s2 ,q->s2=q->pNext->s2,q->pNext->s2=s2;
- s3=q->s3 ,q->s3=q->pNext->s3,q->pNext->s3=s3;
- strcpy(num, q->num );
- strcpy(q->num,q->pNext->num );
- strcpy(q->pNext->num,num);
- strcpy(name, q->name );
- strcpy(q->name,q->pNext->name );
- strcpy(q->pNext->name,name);
- }
- }
- }
- //STUNODE* pTemp = g_pHead;
- while (pTemp != NULL)//遍历链表
- {
- printf ("学号:%s\t, 姓名:%s\t, 英语:%d\t, 计算机:%d\t, 数学:%d\t\n", pTemp->num, pTemp->name, pTemp->s1, pTemp->s2, pTemp->s3);
- //向下走一步
- pTemp = pTemp->pNext;
- }
-
-
- }
复制代码 |
|