C语言编写方案学生成绩管理系统_第1页
C语言编写方案学生成绩管理系统_第2页
C语言编写方案学生成绩管理系统_第3页
C语言编写方案学生成绩管理系统_第4页
C语言编写方案学生成绩管理系统_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、难易程度中等开发语言C开发工具操作系统:Windows XP或更高开发平台:VC+ 6.0关键字学生成绩管理C语言程序设计课程综合案例案例03 学生成绩管理系统3.1需求分析在对学生成绩管理系统进行需求分析的过程中,需要确定系统的主要功能,对软件开发的主要目的、软件的使用领域和有关该软件开发的软硬件环境进行详细的分析。3.1.1 系统概述学生成绩管理系统主要用于对学生的学号、姓名及各项学科成绩进行增、删、改、查等操作。系统给用户提供了一个简单的人机界面,使用户可以根据提示输入操作项,调用系统提供的管理功能。3.1.2 系统运行环境一、硬件环境l 处理器:Intel Pentium 166 MX

2、或更高l 内存:32MBl 硬盘空间:1GBl 显卡:SVGA显示适配器二、软件环境l 操作系统:Windows 98/ME/2000/XP3.1.3 功能需求描述1. 输入学生信息:用户根据提示输入学生的学号、姓名、各科成绩,并由系统计算总分和平均分,并设置名次的初始值为0。可一次性输入多条学生记录。2. 查找学生信息:按照学生姓名查找学生信息,如果存在,则提示用户找到并输出查找结果。3. 插入学生信息:插入在指定学号的记录前,先查找指定学号是否存在,若存在,直接插入在此记录前,若不存在,则插入在所有记录最后。4. 修改学生信息:提示用户输入要修改的学生学号,查找该学号是否存在,成功则允许修

3、改该学生的姓名、学科成绩等主要内容,并重新计算总分和平均分;失败,显示没找到。5. 删除学生信息:提示用户输入要删除的学生学号,如在,则删除,若没有,则提示相应信息。6. 保存信息至文件:将所有的学生成绩信息保存到磁盘文件中,以方便用户管理。7. 读文件:将磁盘文件中的数据读到内存以供用户进行查询、修改、删除、添加、排序等操作。8. 学生成绩排序:根据学生成绩的总分进行降序排列,并将排序结果显示给用户。9. 计算学生总分和平均分:计算每位学生的总分和平均分,并计算所有学生的总分和平均分。10. 文件备份:将磁盘文件做一个备份文件,以防止数据意外丢失。3.2总体设计3.2.1设计思路程序设计一般

4、由两部分组成:算法和数据结构,合理地选择和实现一个数据结构和处理这些数据结构具有同样的重要性。在管理程序中,若使用静态数组保存数据,则会占用连续的存储空间。它的缺点是需要预先估计记录大小,如果估计得过大,则浪费空间,如果小了,不容易扩充。特别是当需要动态变化时,例如插入数据和删除数据等操作需要移动数据,容易出错。所以我们使用单链表结构来管理学生成绩,这样,不用事先估计学生人数,方便随时插入和删除学生记录,且不必移动数据,实现动态管理。代价是牺牲一部分空间用来存放表示结点关系的指针。当然,链表的灵活性也带来了管理的复杂性。3.2.2系统模块结构图本程序利用单链表存储结构完成对学生成绩的动态管理,

5、其基本功能模块如图3-1所示。学生成绩管理系统输入记录模块更新记录模块统计记录模块输出记录模块从文件读入从键盘输入文件备份查询记录修改记录删除记录插入记录学生成绩排序学生成绩计算(总分和平均分)输出至屏幕输出至文件图3-1 基本功能模块图3.2.3数据结构设计将一个学生当作一个结点,这个结点的类型为结构体,结构体中的域表示学生的属性,每个结点除了存放属性外,还存放结点之间的关系,即存放指向后继结点的指针。结点结构如下:#define N 3 /定义课程门数,可以根据情况设定typedef struct student/定义数据结构char no10; /学号char name20; /姓名fl

6、oat scoreN; /各门课成绩float sum; /总分 float ave;/平均分 int order;/名次 struct student *next;/指向后继结点的指针STU;/结构体类型名3.2.4功能模块设计一、main()主函数开始调用menu()菜单函数进入while(1)主循环输入0-12中的一个数值,选择相应操作输入是否为12?判断键值,调用相应函数,完成相应功能否是结束图3-2 主控函数执行流程图程序采用模块化设计,主函数是程序的入口,主函数不宜复杂,功能尽量在各模块中实现。main()函数执行流程图如图3-2所示。首先声明一些必要的变量,然后作一无限循环程序,

7、循环体为一个开关语句,该语句的条件值是通过调用主菜单函数得到的返回值,根据该值,调用相应的各功能函数,同时设置一个断点,即当返回值为一定条件时运行exit()函数结束程序,以免造成死循环。二、menu_select()主菜单直接利用输出函数printf输出字符串,在屏幕上显示一个菜单,并显示一个提示输入选项,输入0-12之间的数字,将此数字作为菜单函数的返回值返回主函数,主函数根据这个数字调用相应的功能函数。制作简便,操作简单,界面如图3-3所示。图3-3 主菜单界面三、输入记录模块1.从键盘输入输入学生信息的同时,创建链表。按照提示信息输入学号、姓名、三门课程成绩,每输入一个数就按一下回车键

8、,当输入学号首字符为时结束输入,返回主函数,单链表创建完毕。在生成链表时,每次新输入的结点放在表头,这样最先输入的结点存放在最后。对于数据库管理,为避免数据出错或减少数据出错的概率,应考虑数据完整性的验证。该功能由两个函数create()和inputs()完成。设置头指针为空,申请内存空间,如果申请不到,则内存空间满,无法保存数据,则返回主程序;否则输入数据,并进行相应的校验(学号和姓名调用函数inputs输入和校验),成绩就在create()中边输入边验证,以保证输入合法数据。当成绩输入后,计算该生的总分和平均分,并将名次数据先置0,待排序后再赋予新值。数据输入后,将其后继结点指针指向当前头

9、结点,新头指针指向新输入结点,这样新插入结点总在头。数据输入结束后返回链表的头指针到主函数。2.从文件读入按照文件的读写要求,先定义一个指向文件的指针,输入读入数据的磁盘文件名,然后确定文件的打开方式。如果文件打不开,则退出函数,否则选择一种读文件方式,从文件头开始,将记录读入内存,直到文件尾。文件打开方式和读入方式的确定要依据输出文件的打开方式和写入方式,以免数据读入错误。如果输出文件是二进制文件,块写操作,读入也应设置为二进制打开方式,块读取方式。每读入一条记录,都要做好指针链接关系,本模块将新结点链接到当前链表的尾部,链表的顺序和文件保存的顺序一致。四、更新记录模块1.查询记录按照姓名查

10、找结点,从头结点开始顺序查找,成功显示记录信息,失败,显示没找到。姓名是字符串,比较功能利用字符串比较函数strcmp()实现。2.修改记录输入要进行修改的学生学号,从头结点开始顺序查找该学号是否存在,成功则允许修改该学生的姓名、学科成绩等主要内容,并重新计算总分和平均分;失败,显示没找到。3.删除记录删除指定学号的学生记录。首先输入要删除结点的学号,输入后根据学号顺序查找结点,如果没找到,则输出没找到信息;否则,显示找到的结点信息,按任意键后显示已删除信息。注意删除结点时的操作,如果该结点是首结点,则要修改头指针,如图3-4所示;否则,将该结点的前趋指针的后继指向其后继结点,如图3-5所示,

11、然后释放该结点。ph×图3-4 被删结点为头结点×h.q图3-5 被删结点不是头结点p4.插入记录插入结点需要输入插入位置和新结点信息。输入某个结点的学号,新结点将插入在这个指定结点之前。申请空间得到指针info,输入新结点信息,存放到新申请的空间info中。设链表头指针为h,p为指定结点的指针,q为p的前趋指针。从头结点开始循环移动指针p查找指定结点,查找和插入时分以下几种情况处理: 指针p为空,如果p等于头指针h,说明链表为空,则新结点即为头结点,修改指针h=info。否则,说明表中没有指定结点,则新结点插入在表尾部,此时q所指结点是最后一个结点,所以修改指针q->

12、;next=info,如图3-6所示。p= =NULLq->next=infoqinfo图3-6 p为空且不等于h,新结点插入在尾部 指针p不为空,如果p等于h,说明新结点插入在当前第一个结点之前,为新的头结点,修改指针info->next=p,h=info,如图3-7所示。否则,说明新结点的位置应在p和q两个结点之间,修改指针info->next=p,q->next=info,如图3-8所示。h=infoinfo ->next=pqinfoph×图3-7 新结点为头结点q->next=infoinfo ->next=pqinfop图3-8

13、新结点位于中间某个位置×五、统计纪录模块1.学生成绩计算从头指针开始,每读一条记录,将该生的总分累加,并统计记录条数,当所有数据处理完毕,求出平均分,最后输出结果为所有学生的总分和平均分。2.学生成绩排序对于学生成绩管理,一个很重要的运算是将学生按照分数由高到低排名,本模块实现按照总分排序功能。排序算法有很多,对于确定的数据结构,应选用一种合适的算法。由于学生信息采用的是单链表存储结构,所以选用直接插入算法较为简单。直接插入算法的基本方法是:每步将一个待排序的记录按其排序码值的大小插到前面已经排序好的表中,直到全部插入为止。基于这样的方法首先将链表的头结点看作是已排好序的结点,然后取

14、下一个结点作为待排序的结点,插入到已排好序的表中。由于单链表的特性,所以具体的思路如下:; 先将原表头结点作为新排好序表的头结点h,原表下一个结点作为原表头结点h1,设原表如图3-9所示,表中只列出总分数据。h图3-9 设新表头结点×h1208236220 原表头结点为待排序结点,将其总分与新表结点的总分进行比较,如果待排序结点总分大,则插在新表的头,否则插入在其后,原表头结点后移一位,如图3-10所示。th图3-10 插入在表头h×h1208236220pqt->next=p 重复第二步,则将原表头结点的总分和新表结点的总分进行比较,如果待排序结点总分小,则移动新表

15、指针,直到找到合适的位置将其插入,直到原表为空,所有结点排序完毕,如图3-11所示。th图3-11 在结点之间插入×h1=NULL208236220pqt->next=pq->next=t六、输出记录模块1.文件备份模块为了保存数据,防止意外发生,为数据做备份是很有必要的。本模块是将文件读写功能结合到一起的应用。先输入源文件名,再输入目标文件名,然后利用文件读写函数将源文件中的信息写到目标文件中。2.学生信息保存至文件将学生信息保存到指定文件中。按照文件的读写要求,先定义一个指向文件的指针,输入要保存的磁盘文件名,如果输入的是绝对路径,则文件保存到指定位置;如果只给文件名

16、,则文件保存在VC6.0默认的路径下。然后确定文件的打开方式,打开文件。如果文件打不开,则退出程序,否则选择一种写文件方式,从链表的头指针开始,顺序将记录写入文件,直到所有记录写完,标志就是移动后指针为空。3.显示所有学生信息-输出至屏幕学生成绩表建立好后,更频繁的操作是显示和查找记录,本模块实现显示所有链表数据功能。输出界面如图3-12所示。图3-12 输出界面由于单链表只能采取顺序访问的方法,所以定义一个指向结点的临时变量p,初值为单链表的头指针,输出指针所指记录的数据后,将指针后移一个记录,直到p指针值为空,则所有记录输出完毕。设计本模块时注意输出格式以二维表格的形式输出,直观漂亮。输出

17、的第一列为记录号。注意调整格式,对齐表格线。3.3详细设计3.3.1程序预处理包括加载头文件,定义结构体、常量和变量,并对它们进行初始化。#include "stdio.h" /I/O函数#include "stdlib.h" /标准库函数#include "string.h" /字符串函数#include "ctype.h" /字符操作函数#include "conio.h"/控制台输入输出函数#include "malloc.h" /动态地址分配函数#include &q

18、uot;memory.h" /内存操作函数#define N 3 /定义课程门数,可以根据情况设定typedef struct student/定义数据结构char no10; /学号char name20; /姓名float scoreN; /各门课成绩float sum; /总分 float ave;/平均分 int order;/名次 struct student *next;/指向后继结点的指针STU;/结构体类型名 /*以下是函数原型*/STU *init(); /初始化函数STU *create(); /创建链表void print(STU *h); /显示所有记录voi

19、d search(STU *h);/查找记录STU *insert(STU *h); /插入记录STU *modify(STU *h); /修改记录STU *delete(STU *h); /删除记录void save(STU *h); /记录保存为文件STU *load(); /从文件中读记录void compute(STU *h); /计算总分和平均分STU *sort(STU *h);/排序void copy();/文件备份void inputs(char *prompt,char *s,int count); /输入字符串,并进行长度验证int menu_select(); /主菜单函

20、数3.3.2主函数main()实现对整个程序的运行控制,以及相关功能模块的调用。int main() STU *head; /链表定义头指针 head=init();/初始化链表 system("cls"); /清屏 for (;) /无限循环 switch(menu_select() case 0:head=init();break; /执行初始化 case 1:head=create();break; /输入记录创建链表 case 2:print(head);break; /显示所有记录 case 3:search(head);break;/查找记录 case 4:he

21、ad=insert(head);break;/插入记录 case 5:head=modify(head);break;/修改记录 case 6: head=delete (head);break;/删除记录 case 7:save(head);break;/保存文件 case 8:head=load();break;/读文件 case 9:compute(head);break;/计算总分和平均分 case 10:head=sort(head);break;/排序 case 11:copy();break;/文件备份 case 12:exit(0);/结束程序 return 0; 3.3.3m

22、enu_select()主菜单用户进入通讯录管理系统时,需要显示主菜单,提示用户进行选择,完成相应任务。此代码被main()函数调用。/*函数功能:显示主菜单,进行功能选择入口参数:无出口:返回用户的选项调用方式:menu_select()*/int menu_select() char s80; int c; printf("按任意键继续n"); getch(); system("cls");/清屏 printf("*学生成绩管理系统菜单*nn"); printf(" 0.初始化n"); printf("

23、; 1.输入记录n"); printf(" 2.显示全部记录n"); printf(" 3.查找记录n"); printf(" 4.插入记录n"); printf(" 5.修改记录n"); printf(" 6.删除记录n"); printf(" 7.保存文件n"); printf(" 8.读文件n"); printf(" 9.计算总分和平均分n"); printf(" 10.按总分排序n");printf

24、(" 11.文件备份n"); printf(" 12.退出n"); printf("*n"); do printf("n 输入你的选择(0-12):"); scanf("%s",s); c=atoi(s);/将数字字符串转换为数值 while (c<0|c>12); return c; 3.3.4初始化/*函数功能:初始化链表入口参数:无出口:返回一个链表空指针调用方式:init()*/STU *init() return NULL;3.3.5输入记录模块一、从键盘输入按照提示信息输

25、入学号、姓名、三门课程成绩,并计算出总分和平均分,同时,创建链表。/*函数功能:输入字符串,并进行长度验证入口参数:prompt:提示信息,s:待验证字符串,count:长度出口:无调用方式:inputs(“输入姓名:”,info->name,20);*/void inputs(char *prompt,char *s,int count) char p255; do printf(prompt);/显示提示信息 scanf(“%s”,p);/输入字符串 if(strlen(p)>count) printf(“ntoo long!n”);/进行长度验证,超过count值重新输入 w

26、hile(strlen(p)>count); strcpy(s,p);/将输入的字符串拷贝到字符串s中 /*函数功能:创建链表入口参数:无出口:返回链表头指针调用方式:create();*/STU *create() int i; float s; STU *h=NULL,*info; for(;) info=(STU *)malloc(sizeof(STU);/申请空间 if(!info)/若指针info为空 printf(“n out of memory”);/提示内存溢出 return NULL; /返回空指针 inputs(“输入学号:”,info->no,10);/输入学

27、号并检验 if(info->no0=) break;/如果学号首字符为,结束输入 inputs(“输入姓名:”,info->name,20); /输入姓名并检验 printf(“请输入%d门课程成绩n”,N);/提示开始输入成绩 s=0;/计算每个学生的总分,初值为0 for(i=0;i<N;i+) do printf(“课程%d:”,i+1);/提示输入第几门课程 scanf(“%f”,&info->scorei);/输入成绩 if(info->scorei>100|info->scorei<0) printf(“成绩超出指定范围!”)

28、; while(info->scorei>100|info->scorei<0); s+=info->scorei;/累加各门成绩 info->sum=s;/将总分保存 info->ave=s/N;/求平均分 info->order=0;/未排序前此值为0 info->next=h;/将头结点作为新输入结点的后继结点 h=info;/新输入结点为新的头结点 return h;/返回头指针 二、从文件读入数据/*函数功能:从文件读数据,并把读入的数据链入链表入口参数:无出口:返回链表头指针调用方式:load();*/STU *load()ST

29、U *p,*q,*h=NULL;FILE *fp;char infile50;printf("请输入文件名,例如:c:f1te.dat:n");/提示文件名格式信息scanf("%s",infile);if(fp=fopen(infile,"rb")=NULL)printf("不能打开文件!n");exit(1);printf("n读文件n");p=(STU *)malloc(sizeof(STU);if(!p)printf("内存溢出!n");return h;h=p;wh

30、ile(!feof(fp)if(1!=fread(p,sizeof(STU),1,fp)break;p->next=(STU *)malloc(sizeof(STU);if(!p->next)printf("内存溢出!n"); return h;q=p;p=p->next;q->next=NULL;fclose(fp);printf("成功读取文件!n");return h;3.3.6更新记录模块一、查找记录从头结点开始顺序查找,查找指定姓名的记录。/*函数功能:按照姓名查找记录入口参数:h:链表头指针出口:无调用方式:searc

31、h(head);*/void search(STU *h)STU *p;/移动指针char s20;/存放姓名的字符数组system("cls");/清屏printf("请输入要查找的姓名:n");scanf("%s",s);/输入姓名 p=h; while(strcmp(p->name,s)&&p!=NULL)p=p->next ;/移动指针,指向下一结点if(p=NULL) printf("没有姓名为%s的学生!n",s);elseprintf("nnn*查找结果*n&qu

32、ot;); printf("学号tt姓名t课程1t课程2t课程3t总分t平均分t名次n");printf("-n");printf("%st%st%.1ft%.1ft%.1ft%.1ft%.1ft%dn",p->no,p->name,p->score0,p->score1,p->score2,p->sum,p->ave,p->order); printf("-n");二、插入记录在指定学号的学生前插入一条记录。若指定学号不存在且学生表为空表,则直接插入此学生信息为头结

33、点,若学生表不为空表,则在表尾插入。若指定学号存在,且为头结点,则新输入的学生信息作为新的头结点插入在指定学号前,否则,作为中间结点直接插入到指定学号前。/*函数功能:插入记录入口参数:h:链表头指针出口:返回链表头指针调用方式:insert(head);*/STU *insert(STU *h)STU *p,*q,*info;/p指向插入位置,q是其前趋,info指新插入记录char s10;/保存插入点位置的学号float s1;int i;printf("在哪个学号前插入?");scanf("%s",s);/输入插入点学号printf("

34、n请输入新的记录:n");info=(STU *)malloc(sizeof(STU);/申请空间if(!info)printf("n out of memory");/提示内存溢出 return NULL; /返回空指针 inputs("输入学号:",info->no,10);/输入学号并检验inputs("输入姓名:",info->name,20); /输入姓名并检验printf("请输入%d门课程成绩n",N);/提示开始输入成绩s1=0;/计算每个学生的总分,初值为0for(i=0;i

35、<N;i+)do printf("课程%d:",i+1);/提示输入第几门课程 scanf("%f",&info->scorei);/输入成绩 if(info->scorei>100|info->scorei<0) printf("成绩超出指定范围!"); while(info->scorei>100|info->scorei<0); s1+=info->scorei;/累加各门成绩 info->sum=s1;/将总分保存info->ave=s1/N

36、;/求平均分info->order=0;/名次赋为0info->next=NULL;/设后继指针为空p=h;q=h;while(p!=NULL&&strcmp(p->no,s) /查找插入位置q=p;p=p->next;if(p=NULL) /如果p指针为空,说明没有指定结点if(p=h)/同时p等于h,说明链表为空h=info;/新记录则为头结点elseq->next=info;/p不为空,但p不等于h,将新结点插在表尾elseif(p=h)info->next=p;/如果p等于h,则新结点插入在第一个结点之前h=info;/新结点为头结点

37、elseinfo->next=p;/不是头结点,则是中间某个位置,新结点的后继为pq->next=info;/新结点作为q的后继结点printf("成功插入!");return h;三、修改记录/*函数功能:修改指定学号的学生信息入口参数:h:链表头指针出口:返回链表头指针调用方式:modify(head);*/STU *modify(STU *h)STU *p;/p为查找到要修改的结点指针char s10;/存放学号int i;float s1;system("cls");/清屏printf("请输入要修改的学生学号:"

38、);scanf("%s",s);p=h;while(p!=NULL&&strcmp(p->no,s) /查找p=p->next; if(p=NULL)printf("没有该学生!n");elseprintf("找到该学生!学生信息见下列n");printf("学号tt姓名t课程1t课程2t课程3t总分t平均分t名次n");printf("-n");printf("%st%st%.1ft%.1ft%.1ft%.1ft%.1ft%dn",p->n

39、o,p->name,p->score0,p->score1,p->score2,p->sum,p->ave,p->order); printf("-n"); printf("请输入修改信息:n"); inputs("输入学号:",p->no,10);/输入学号并检验 inputs("输入姓名:",p->name,20); /输入姓名并检验 printf("请输入%d门课程成绩n",N);/提示开始输入成绩 s1=0;/计算每个学生的总分,初值

40、为0 for(i=0;i<N;i+) do printf("课程%d:",i+1);/提示输入第几门课程 scanf("%f",&p->scorei);/输入成绩 if(p->scorei>100|p->scorei<0) printf("成绩超出指定范围!");while(p->scorei>100|p->scorei<0); s1+=p->scorei;/累加各门成绩p->sum=s1;/将总分保存p->ave=s1/N;/求平均分printf(

41、"修改成功!n");return h;四、删除记录/*函数功能:删除指定学号的记录入口参数:h:链表头指针出口:返回链表头指针调用方式:delet(head);*/STU *delet(STU *h)STU *p,*q;/p为查找到要删除的结点指针,q为其前趋指针char s10;/存放学号char ch;system("cls");/清屏printf("请输入要删除的学生学号:");scanf("%s",s);q=p=h;while(p!=NULL&&strcmp(p->no,s) /查找q

42、=p;p=p->next; if(p=NULL)printf("没有该学生!n");elseprintf("找到该学生!学生信息见下列n");printf("学号tt姓名t课程1t课程2t课程3t总分t平均分t名次n");printf("-n");printf("%st%st%.1ft%.1ft%.1ft%.1ft%.1ft%dn",p->no,p->name,p->score0,p->score1,p->score2,p->sum,p->ave,

43、p->order); printf("-n"); printf("确定要删除这条记录吗?(Y/N):n"); ch=getch();/此处一定要用getch函数输入,其它函数均不可以if(ch='Y' | ch='y')if(p=h)/若被删结点是头结点h=p->next;/修改头指针指向下一条记录elseq->next=p->next;/不是头结点,将p的后继结点作为q的后继结点free(p);printf("删除成功!n");return h;3.3.7统计记录模块一、计算总

44、分和平均分/*函数功能:计算总分和平均分入口参数:h:链表头指针出口:无调用方式:compute(head);*/void compute(STU *h)STU *p;/定义移动指针int i=0;/保存记录条数,初值为0float s=0;/总分初值为0float ave=0;/平均分初值为0p=h;/从头指针开始while(p!=NULL)s+=p->sum;/累加总分i+;p=p->next;ave=s/i;printf("所有学生的总分为:%.2f,平均分为:%.2fn",s,ave);二、按总分排序直接插入排序。/*函数功能:按总分排序入口参数:h:链

45、表头指针出口:返回链表头指针调用方式:sort(head);*/STU *sort(STU *h)int i=0;/保存名次STU *p,*q,*t,*h1;/定义临时指针h1=h->next;/将原表头指针所指的下一个结点作为头指针h->next=NULL;/第一个结点为新表的头结点while(h1!=NULL)/当原表不为空时,进行排序t=h1;/取原表的头结点h1=h1->next;/原表头结点指针后移p=h;/设定移动指针p,从头指针开始q=h;/设定移动指针q作为p的前趋,初值为头指针while(p!=NULL&&t->sum<p->sum)/进行总分比较q=p;/待排序点值小,则新表指针后移p=p->next;if(p=q)/p=q,说明待排序点值大,应排在首位t->next=p;/待排序点的后继为ph=t;/新头结点为待排序点else/待排序点应插入在中间某个位置q和p之间,如果p为空则是尾部t->next=p;/待排序点的后继为pq->next=t;/q的后继是tp=h;/已排序好的头指针赋给p,准备填写名次 while(p!=NULL)i+;/结点序号p->order=i;/将名次赋值p=p->next;/指针后移printf(&

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论