数据结构 用链表实现学生信息管理系统
数据结构 用链表实现学生信息管理系统
3、4、7、#include <iostream>using namespace std;//实现线性表的链式存储结构的类型定义typedef int Elemtype;#define OK 1;#define ERROR -1;struct NODE //结点类型{Elemtype elem;NODE *next;};struct LINK_LIST //链表类型{NODE *head;};//典型操作的算法实现//初始化链表Lint InitList(LINK_LIST *L){L->head = (NODE*)malloc(sizeof(NODE)); //为头结点分配存储单元if (L->head) {L->head->next=NULL; return OK;}else return ERROR ;}//销毁链表Lvoid DestoryList(LINK_LIST *L){NODE *p;while (L->head) //依次删除链表中的所有结点{p=L->head; L->head=L->head->next;free(p);}}//清空链表Lvoid ClearList(LINK_LIST *L){NODE *p;while (L->head->next){ //p指向链表中头结点后面的第一个结点p=L->head->next;L->head->next=p->next; //删除p结点free(p); //释放p结点占据的存储空间}}//求链表L的长度int ListLength(LINK_LIST L){NODE *p;int len;len=0;for(p=L.head;p->next!=NULL; p=p->next)len++ ;return(len);}// 判链表L空否。
C语言链表学生管理系统代码-数据结构01
{
if( !strcmp(name, p->) )
{
printf("\n学号\t姓名\t成绩\n");
printf("%d\t%s\t%d\n", p->data.num, p->, p->data.price);
# include <stdio.h>
# include <time.h>
# include <malloc.h>
# include <string.h>
typedef struct {
int num;
char name[20];
int price;
}Student;
printf("请输入要读取的位置:");
if( !scanf("%d", &pos) )
{
printf("您输入的位置格式出错,请输出阿拉伯数字!\n");
fflush(stdin);
return;
}
fflush(stdin);
if(pos <= 0){printf("输入的位置不能为负数。\n");return;}
{
printf("您输入的成绩格式出错,请输出阿拉伯数字!\n");
free(p);
fflush(stdin);
return;
}
fflush(stdin);
pLast->next = p;
p->next = NULL;
C语言程序设计实验实验报告7
C语言程序设计实验实验报告7实验名称:链表实现学生信息管理系统实验目的:通过设计链表实现学生信息管理系统,掌握链表的操作方法及其应用。
实验内容:设计一个学生信息结构体,包括学号、姓名、性别、年龄和成绩五个成员变量,并选择链式结构存储这些数据。
实现以下功能:1. 添加学生信息:从键盘输入学号、姓名、性别、年龄和成绩等信息,添加到链表中。
2. 删除学生信息:从链表中删除指定学号的学生信息。
5. 按成绩排序:按学生的成绩从高到低排序,并输出所有学生的信息。
7. 退出程序:退出学生信息管理系统。
实验方法:1. 设计学生信息结构体,定义链表节点结构体,并编写初始化链表和销毁链表的函数。
2. 编写添加学生信息函数,新建链表节点并插入链表末尾。
3. 编写删除学生信息函数,根据学号查找需要删除的节点,先将该节点从链表中删除,再释放节点空间。
4. 编写修改学生信息函数,根据学号查找需要修改的节点,并修改其成员变量。
6. 编写按成绩排序函数,使用冒泡排序法对链表进行排序,并输出所有学生的信息。
7. 编写输出所有学生信息函数,遍历链表并输出每个节点的信息。
8. 完成学生信息管理系统的主函数,实现菜单及相应功能的选择。
实验结果:依次选择菜单中的各个功能,添加、修改、删除、查找、排序和输出学生信息都能实现。
经测试,程序稳定运行,功能正常,符合需求。
本次实验主要让我们掌握了链式结构的概念、链表节点的定义、链表的初始化、插入、查找、删除和销毁链表的操作方法,以及在实际应用中如何使用链表来实现数据管理。
虽然链表操作相对于数组稍微有些繁琐,但其可以灵活处理数据结构的长度变化,具有更高的可扩展性和更好的操作效率,可以更好的适应各种实际需求。
在实验中,还需要注意节点指针的正确使用、各个函数之间的调用关系和输入输出数据格式的合理选择等问题,以保证程序能够正常运行。
同时,还需要保持认真细致的态度,严格按照实验需求和要求来完成每个步骤,以达到更好的实验效果和运行效率。
数据结构:运用单链表 制作 学生成绩管理系统
单链表操作的实现
int GetElem(Node* head, int i) // 取第i个数据元素 void Insert(Node *head, int i, int d) // 插入数据元素
void Delete(Node *head, int i)
void Clear(Node *head) Node * CreateList(int n)
学生成绩管理系统
Team Members
Content
单链表
1 2 3 4
介绍 操作实现 删除结点 插入结点
学生成绩管理系 运行结果
4
单链表
头指针
头结点
链表为空时, 头结点的指针域为空
空指针
a1
a2
… ... an ^
有时为了操作方便,在第一个结点之前虚 加一个“头结点”,以指向头结点的指针 为链表的头指针。
利用单链表实现四大功能:
(1)输入记录: (2)查询记录: (3)更新记录: (4)输出记录:
主控main()函数的执行流程
若选1 调用add_record()函数,增加学生记录; 若选2 调用delete_record()函数,进行删除操作; 若选3 调用search_record()函数,进行查询操作; 若选4 调用modify_record()函数,进行修改操作;
// 删除数据元素
// 清除链表 // 生成含 n 个数据元素的链表
单链表操作:
(1)单链表中删除节点的示意图如下:
算法表示:p1->next=p2->next;
(2)单链表中插入节点的示意图如下:
算法表示:s>next=p->next;p->next=s;
学生管理系统链表数据结构课程设计
课程设计任务书1、题目:学生信息管理系统2、设计内容及要求:内容:完成简单的学生信息管理系统要求:(1)学生信息包括:学号、姓名、平时成绩、期末考试成绩;(2)用单链表存放学生信息;(3)实现简单的菜单调用;(4)程序的功能包括:学生信息链表的建立;学生信息的插入;学生信息的查询;学生信息的修改;学生信息的删除;学生信息的输出。
编写算法,编码实现基本要求。
3.设计时间:6 月27 日-7 月1 号目录一、需求分析--------------------- 3二、概要设计----------------------4三、详细设计----------------------6四、调试分析--------------------- 14五、用户使用说明----------------- 14六、测试结果--------------------- 17七、附录(略)---------------------- 17一.需求分析分析课程设计任务书,本次数据结构课程设计的任务是利用数据结构中所学的相关知识编程设计实现一个学生信息管理系统,使该系统可以方便的查询学生的各项信息和方便管理。
根据任务书中的第五条要求,为来使用者方便使用。
需给出输入、插入、查询、修改、显示等功能。
根据上面的需求分析,画出程序的功能模块图大致如下:系统设计流程图二、概要设计根据上面所述的需求分析,结合我们学过的数据结构知识,要想在计算机中储存学生的信息,可以使用顺序存储和链式存储两种数据类型下面给出本程序用到抽象数据类型定义:ADT List{数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0 }数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}基本操作P:InitList(&L);操作结果:构造一个空的线性表L。
DestroList(&L);初始条件:线性表L已存在。
用链表实现学生信息存储系统
#include <stdio.h>#include <stdlib.h>#include <string.h>#define PF printf#define LEN sizeof(struct student)//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆定义结构体◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆struct student{char NO[20];char name[20];int age;char sex[3]; /*'F'表示性别男,'M'表示性别女*/char birthday[10];char address[30];char phone[20];char e_mail[20];struct student *next; //下个结点};typedef struct student STU;STU *head=NULL; //全局指针int n,i=0; //全局变量//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆自定义函数◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void show_menu(); //显示菜单void menu(); //执行菜单void creat_stu(); //建立链表void insert_stu(); //学生信息录入void print_stu(); //学生信浏览void search_NO(); //以学号方式查询信息void search_name(); //以姓名方式查询信息void arrage_stu(); //排序void del_stu(); //删除学生信息void revise_stu(); //修改学生信息void save(); //保存信息void main(){creat_stu();menu();}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆创建链表◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void creat_stu(){FILE *fp;long size;STU *p1,*p2;head=(STU *)malloc(sizeof(STU));head->next=NULL;if((fp=fopen("fname.txt","r"))==NULL){printf("这是新表\n");return;}fseek(fp,0L,2);size=ftell(fp);if(!size){printf("这是空表\n");return;} //开始创建链表rewind(fp); //移动到文件首p2=head->next; //找到但前位置while(!feof(fp)){p1=(STU *)malloc(sizeof(STU));fscanf(fp,"%s %s %d %s %s %s %s %s\n",p1->NO,p1->name,&p1->age,\p1->sex,p1->birthday,p1->address,p1->phone,p1->e_mail);p1->next=NULL;//创建节点完if(head->next==NULL)head->next=p1;elsep2->next=p1;p2=p1;n++;}p2->next=NULL;fclose(fp);//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆执行菜单◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void menu(){int c;show_menu();while(1){scanf("%d",&c);switch(c){getchar();case 1:insert_stu();break;case 2:print_stu();break;case 3:search_NO(); break;case 4:search_name(); break;case 5:del_stu(); break;case 6:revise_stu(); break;case 7:arrage_stu();break;case 0:exit(0);} //执行菜单选项show_menu();}}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆显示菜单◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void show_menu(){PF("\n");PF("\n※※※※※※※※※※※※※※※※※※菜单※※※※※※※※※※※※※※※※※※\n");PF("\t\t◆1.输入学生信息◆\n");PF("\t\t★2.浏览学生信息★\n");PF("\t\t◆3.以学号方式查询信息◆\n");PF("\t\t★4.以姓名方式查询信息★\n");PF("\t\t◆5.删除学生信息◆\n");PF("\t\t★6.修改学生信息★\n");PF("\t\t◆7 排序◆\n");PF("\t\t★0. 退出★\n");PF("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");PF("\n请选择\n");}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生信息录入◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void insert_stu() //学生信息录入{n=0;STU *p1=NULL,*p2=NULL;p1=(STU *)malloc(sizeof(STU));PF("\n※※※※※※※※※※※※※※※※※※录入学生信息※※※※※※※※※※※※※※※※※※\n"); //录入学生信息PF("\t\t输入学生学号:\t");scanf("%s",p1->NO); //学号PF("\t\t输入学生姓名:\t");scanf("%s",p1->name); //姓名PF("\t\t输入学生年龄:\t");scanf("%d",&p1->age); //年龄PF("\t\t输入学生性别:\t");scanf("%s",p1->sex); //性别PF("\t\t输入学生出生年月:\t");scanf("%s",p1->birthday); //出生年月PF("\t\t输入学生地址:\t");scanf("%s",p1->address); //地址PF("\t\t输入学生电话:\t");scanf("%s",p1->phone); //电话PF("\t\t输入学生E-mail:\t");scanf("%s",p1->e_mail); //E-mailn++;if(head->next==NULL){head=(STU *)malloc(LEN);head->next=p1;}else{for(p2=head;p2->next!=NULL;p2=p2->next); /*找到最后的结点,然后将增加的结点挂在它上面*/p2->next=p1;}p1->next=NULL;save();//保存到文件}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生信息浏览◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void print_stu() //学生信浏览{STU *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}for(p=head->next;p!=NULL;p=p->next) //读出信息{PF("※※※※※※※※※※※※※※※※※※学生信息浏览※※※※※※※※※※※※※※※※※※\n");PF("\t\t学生学号:\t%s\n",p->NO);PF("\t\t学生姓名:\t%s\n",p->name);PF("\t\t学生年龄:\t%d\n",p->age);PF("\t\t学生性别:\t%s\n",p->sex);PF("\t\t学生出生年月:\t%s\n",p->birthday);PF("\t\t学生地址:\t%s\n",p->address);PF("\t\t学生电话:\t%s\n",p->phone);PF("\t\t学生E-mail:\t%s\n",p->e_mail);PF("\n");} //输出信息}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生姓名信息查找◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void search_name() //学生姓名信息查找{STU *p=NULL;char name[20];if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}PF("输入学生姓名:");scanf("%s",name);for(p=head->next;p!=NULL;p=p->next) //读出信息{if(!strcmp(p->name,name)){PF("※※※※※※※※※※※※※※※※※※您查找的学生是※※※※※※※※※※※※※※※※※※\n");PF("\t\t学生学号:\t%s\n",p->NO);PF("\t\t学生姓名:\t%s\n",p->name);PF("\t\t学生年龄:\t%d\n",p->age);PF("\t\t学生性别:\t%s\n",p->sex);PF("\t\t学生出生年月:\t%s\n",p->birthday);PF("\t\t学生地址:\t%s\n",p->address);PF("\t\t学生电话:\t%s\n",p->phone);PF("\t\t学生E-mail:\t%s\n",p->e_mail);PF("\n");i=1;}} //输出信息if(!i){PF("无该生信息!请查证:"); } //没找到信息时的处理}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆学生学号信息查找◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void search_NO() //学生学号信息查找{STU *p=NULL;char NO[20];if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}PF("请输入学生学号:");scanf("%s",NO);for(p=head->next;p!=NULL;p=p->next) //读出信息{if(!strcmp(p->NO,NO)){PF("※※※※※※※※※※※※※※※※※※您查找的学生是※※※※※※※※※※※※※※※※※※\n");PF("\t\t学生学号:\t%s\n",p->NO);PF("\t\t学生姓名:\t%s\n",p->name);PF("\t\t学生年龄:\t%d\n",p->age);PF("\t\t学生性别:\t%s\n",p->sex);PF("\t\t学生出生年月:\t%s\n",p->birthday);PF("\t\t学生地址:\t%s\n",p->address);PF("\t\t学生电话:\t%s\n",p->phone);PF("\t\t学生E-mail:\t%s\n",p->e_mail);PF("\n");i=1;}} //输出信息if(!i){PF("无该生信息!请查证:"); } //没找到信息时的处理}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆修改学生信息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void revise_stu(){STU *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}char NO[20];PF("请输入学生的学号:\t");scanf("%s",NO);for(p=head->next;p!=NULL;p=p->next){if(!strcmp(p->NO,NO)) //验证信息是否正确{PF("※※※※※※※※※※※※※※※※※※您要修改的学生是※※※※※※※※※※※※※※※※※※\n");PF("\t\t学生学号:\t%s\n",p->NO);PF("\t\t学生姓名:\t%s\n",p->name);PF("\t\t学生年龄:\t%d\n",p->age);PF("\t\t学生性别:\t%s\n",p->sex);PF("\t\t学生出生年月:\t%s\n",p->birthday);PF("\t\t学生地址:\t%s\n",p->address);PF("\t\t学生电话:\t%s\n",p->phone);PF("\t\t学生E-mail:\t%s\n",p->e_mail);PF("\n"); //输出要修改信息i=1;PF("※※※※※※※※※※※※※※※※※※修改学号为%s的学生※※※※※※※※※※※※※※※※※※\n",NO);strcpy(p->NO,NO);PF("\t\t输入修改学生姓名:\t");scanf("%s",p->name);PF("\t\t输入修改学生年龄:\t");scanf("%d",&p->age);PF("\t\t输入修改学生性别:\t");scanf("%s",p->sex);PF("\t\t输入修改学生出生年月:\t");scanf("%s",p->birthday);PF("\t\t输入修改学生地址:\t");scanf("%s",p->address);PF("\t\t输入修改学生电话:\t");scanf("%s",p->phone);PF("\t\t输入修改学生E-mail:\t");scanf("%s",p->e_mail);PF("\n"); //输入修改信息save();}}if(!i){PF("无该生信息!请查证:");} /*没找到信息时的处理*/}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆删除学生信息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void del_stu(){STU *p=NULL;if(head==NULL) //判断链表是否为空{PF("文档中无记录!\n");return;}else{char NO[20];PF("请输入学生的学号:\t");scanf("%s",NO);for(p=head;p!=NULL;p=p->next)if(!strcmp(p->next->NO,NO)) //验证信息是否正确{PF("※※※※※※※※※※※※※※※※※※您要删除的学生是※※※※※※※※※※※※※※※※※※\n");PF("\t\t学生学号:\t%s\n",p->next->NO);PF("\t\t学生姓名:\t%s\n",p->next->name);PF("\t\t学生年龄:\t%d\n",p->next->age);PF("\t\t学生性别:\t%s\n",p->next->sex);PF("\t\t学生出生年月:\t%s\n",p->next->birthday);PF("\t\t学生地址:\t%s\n",p->next->address);PF("\t\t学生电话:\t%s\n",p->next->phone);PF("\t\t学生E-mail:\t%s\n",p->next->e_mail);PF("\n"); //输出要删除的信息i=1;if(p->next->next){printf("第一个\n");p->next=p->next->next;}elsep->next=NULL;n--;save();return;}if(!i){PF("无该生信息!请查证:"); //没找到信息时的处理return;}}}}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆按学号排序◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void arrage_stu(){STU *p1,*p2;int in=0,j;if(head->next==NULL) //首先判断{printf("你还没有记录,无法排序\n");return ;printf("n=%d",n);p1=head->next;for(in=0;in<n-1;in++)for(j=0,p1=head->next;j<=n-in-3;p1=p1->next,j++){if(j==0)//第一次比较第一个和第二个节点信息{if(strcmp(p1->NO,p1->next->NO))//比较p1本身和p1下一个节点{p2=p1->next;p1->next=p1->next->next;p2->next=p1;head->next=p2;p1=head->next;//从新给CUR赋值/*p1=head->next;p1=p2;错误:如果一个变量=他前一个节点的NEXT 那么不可以说把另外一个变量赋给它就可以改变它前一个节点的NEXT 他只能操作后节点*/}}if(strcmp(p1->next->NO,p1->next->next->NO))//比较p1下一个和p1下两个节点{p2=p1->next;p1->next=p1->next->next;p2->next=p1->next->next;p1->next->next=p2;}}if(strcmp(head->next->NO,head->next->next->NO))//只有两个节点信息时直接比较他们两个{p1=head->next;head->next=p1->next;p1->next=p1->next->next;head->next->next=p1;if(n==2) //只有两个节点信息时把第二个节点的next赋为空head->next->next->next=NULL;}}//◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆保存信息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆void save(){printf("※※※※※※※※※※※※※※※※※※保存信息并结束※※※※※※※※※※※※※※※※※※\n");STU *p=NULL;FILE *fp;char *filename="fname.txt";if((fp=fopen("fname.txt","w"))==NULL) //出错检测{printf("\n打不开文件!\n");return;}if(head->next==NULL){printf("\n信息为空!\n");return;}elsep=head->next;while(p!=NULL){fprintf(fp,"%s %s %d %s %s %s %s %s\n",p->NO,p->name,p->age,p->sex,p->birthday,p->address,p->phone,p->e_mail);//存入文件p=p->next;}printf("保存完毕!\n");fclose(fp);}。
C语言程序设计报告-基于链表的学生信息管理系统
《C语言程序设计实训2》报告设计题目:基于链表的学生信息管理系统学院名称:信息科学技术学院专业:网络工程班级:二班姓名:学号:指导教师:提交日期:一、 实验内容:编写并调试程序,实现学校各专业班级学生信息的管理。
要求一个工程下多个文件。
main 函数以单独的文件main.cpp 存放。
在头文件student.h 中定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩;和符号常量N (学生数)。
(同一班级的学生可以属于不同的专业,同一专业的学生可以属于不同的班级)。
全局类型的定义如下:二、实验要求:(1) main 函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
(2) 定义函数STU *CreateList (char * filename ):从二进制文件“studentInfo.dat ”中依次读取12个学生的数据(在文件中学生信息按学号由低到高依次存放),建立带头结点(特殊结点,不放学生信息)的、有序的单链表(链表中各学生信息按学号由低到高依次存放), 返回表头指针。
每次从文件中读一个学生的信息,并将该学生信息插入到链表的表尾。
设置头结点的目的:在链表中第一个学生结点之前插入或者是删除第一个学生结点的时候不必做特殊处理)更灵活的方法:从文件中循环读数据时,根据当前学生信息的next成员的值,决定是否进行下次循环,如果next==NULL,则表明读到最后一个学生信息,循环结束。
(3)定义函数void Output (STU *head):以指向链表头结点的指针为参数,将链表中所有学生的信息表格化输出。
定义函数void OutOneNode(STU *p): 输出参数所指的链表中一个结点的信息。
(4)STU *Max(STU *head):查找总成绩最高的学生,返回指向该学生结点的指针。
考虑特殊情况,找到两个及以上相同最高分同学的情况,如何处理?(5)定义函数STU *Search_num(STU * head ,char *num ):查找指定的学生,返回指向该学生结点的指针。
学生管理系统(链表版)
first=s; } else { q=first; while(q->next !=p)//查找待插入的节点 p 的前驱节点 q q=q->next ; q->next =s;//将新节点 s 插入在 q 和 p 之间 s->next =p; } return first; } //在 first 指向的单链表中,删除学号为 a 的节点 Lnode *delete_(Lnode **first,int a)//学号为 a { Lnode *q=*first,*p=*first; if(*first==NULL) //如果链表为空链表 return NULL; if((*first)->data.num==a)//如果被删除的节点是首节点 { p=*first; *first=(*first)->next; return p; } for(q=*first;q->next;q=q->next)//如果待删除节点是中间节点 { p=q->next; if(p->data.num==a)//找到符合要求的节点 { q->next=p->next;//删除节点 p return p; } } return NULL; } //在 first 指向的单链表中,查找学号为 num 的节点 Lnode *find(Lnode *first,int num) {
//按数学成绩排序的总算法 Lnode *sortmath(Lnode *first); //按平均分成绩排序的总算法 Lnode *sortaverage(Lnode *first); //在 first 指向的单链表中,按 math 排序 Lnode *sort_math(Lnode *first,Lnode *s); //链表的倒置 Lnode *reverse(Lnode *first); //按计算机最大值排序 void maxcomputer(Lnode *first); //按英语最大值排序 void maxenglish(Lnode *first); //按平均分最大值排序 void maxaverage(Lnode *first); //按数学最大值排序 void maxmath(Lnode *first); //在 first 指向的单链表中,按 average 排序 Lnode *sort_average(Lnode *first,Lnode *s);
使用链表实现简单的学生信息录入系统
printf("请输入你想要插入学生的学号:"); scanf("%ld",&p->sId); printf("请输入你想要插入学生的姓名:");
scanf("%s",p->sName);
int j=1; if(pHead == NULL) {
if (i == 0) {
pHead->pNext = p; p->pNext = NULL; } else { printf("无法插入!\n"); return 0; } } while((j < i-1) && (pTemp != NULL)) { pTemp = pTemp->pNext; j++; } if(pTemp == NULL)
//查找学生 void FindStudentLink(student *pHead,long iId) {
student *pTemp; pTemp = pHead->pNext;
int ifFind = 0; if(pHead->pNext == NULL)
printf("链表为空,无法查找!\n"); while(pTemp != NULL) {
struct STUDENT *pPre; //指向前一个学生
}student;
//创建链表 student * CreateLink() {
student *pHead; //链表头 pHead = (student *)malloc(sizeof(student)); pHead->pNext = NULL; pHead->pPre = NULL;
数据结构单链表应用(简易学生信息管理系统)
数据结构单链表应用(简易学生信息管理系统)1这是主文件建立文件“student-main.cpp”粘贴保存#include#include#include#include#include"student-fun.cpp"#define PRINT "%6d %12s %5.2f\n",p->num,p->name,p->score //定义输出格式#define PRINTF " 学号姓名成绩\n"char cmd;int num;lklist L;void jiemian(){ system("cls");printf("\n***************************************************** ****************** *");printf("\n****** 欢迎使用简易班级学生信息系统********");printf("\n**************");printf("\n******i--增加学生d--删除学生q--退出系统********");printf("\n****** f--查询c--修改l--列出所有学生信息********");printf("\n***************************************************** ****************** *\n");}void ReadCommand(){do {printf("\n 请根据提示输入命令: ");fflush(stdin); //清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件scanf("%c",&cmd);} while (cmd!='i'&&cmd!='d'&&cmd!='l'&&cmd!='q'&&cmd!='f'&&c md!='c');}void Interpret()switch(cmd){case 'i': insert_lklist(L); break;case 'd': del_lklist(L);break;case 'l': list_lklist(L); break;case 'f': find_lklist(L);break;case 'c': cor_lklist(L);break;case 'q': exit(0);}}void main(){L=initial_lklist();do { jiemian();ReadCommand();Interpret();system("pause"); //暂停,按任意键继续。
链表实现学生学籍管理系统
#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 15 //学号位数#define M 15 //姓名字节数#define L 4 //成绩的科数int aa=0;//记录筛选时打开的文void printf_(struct stu *); //输出单个的学生数据struct stu * scanf1_(); //接收单个的学生数据,返回指针,struct stu * scanf_(); //得到学生的数据,并放入到链表中void print_(struct stu *); //输出链表中的学生信息struct stu *num_paixu(struct stu *); //用链表给学生排序void chaxun(struct stu *); //根据学生的学号查询学生的信息,并把学生的数据输出struct stu * charu(struct stu *); //将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。
struct stu * shanchu(struct stu *); //删除数据void xiugai(struct stu *); //修改学生的信息。
void fprint_(struct stu *); //把数据写入到文件int to_ji(struct stu *); //统计学生的总人数int t_ji_tj(struct stu *); //统计成绩在某一区间内的人数struct stu * ch_ji_paixu(struct stu *); //按成绩排序,默认的是按总成绩排序struct s *shaixuan(struct stu *); //筛选符合条件的数据,得到符合条件的结构体数据的指针。
void shuchu_shai(struct s *); //输出筛选出来的数据void fb_shu_shai(struct s *); //将筛选出来的数据输入到文件中void avrage(struct stu *head,float *); //计算平均成绩void fb_avrage(float *); //将平均成绩放在文件的最后面//建立学生结构体struct stu{char num[N];char name[M];int ch_ji[L];struct stu *next;};//建立一个链表,存放学生结构体的指针struct s{struct stu *p;struct s *ps;};void main(){int i,n,x=1,k=0;float a[L]={0};struct stu *head=NULL;struct s *shead=NULL;char ch;while(x){ system("cls");printf("********************************************************************* **********\n");printf(" 0---退出系统1---录入数据\n");printf(" 2---保存文件3---按成绩排序\n");printf(" 4---查看信息5---按学号排序\n");printf(" 6---统计人数7---按条件筛选\n");printf(" 8---查询信息9---显示筛选结果\n");printf(" 10---插入数据11---保存筛选结果\n");printf(" 12---删除数据13---计算平均成绩\n");printf(" 14---修改数据15---保存平均成绩\n");printf(" 16---按条件统计人数\n");printf("********************************************************************* **********\n");scanf("%d",&n);getchar();//有啥作用switch(n){case 0:x=0;break;case 1:head=scanf_();break;case 2:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsefprint_(head);break;case 3:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=ch_ji_paixu(head);break;}case 4:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elseprint_(head);break;case 5:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=num_paixu(head);printf("是否显示排序结果Y/N ?");ch=getchar();getchar();if(ch=='y'||ch=='Y'){printf("\n");print_(head);}}case 6:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=to_ji(head);printf("总共有%3d 名学生",k);getchar();break;}case 7:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{shead=shaixuan(head);if(shead!=NULL&&shead->ps!=NULL){printf("是否显示筛选结果Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n");shuchu_shai(shead);getchar();}}break;}case 8:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();}else{chaxun(head);getchar();break;}case 9:if(head==NULL||head->next==NULL) {printf("请先录入学生的数据!");getchar();break;}else{printf("\n");shuchu_shai(shead);getchar();break;}case 10:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsehead=charu(head);break;case 11:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_shu_shai(shead);getchar();break;}if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=shanchu(head);break;}case 13:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{avrage(head,a);printf("平均值计算成功!\n是否显示平均成绩Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n 语文数学英语总成绩\n");printf("%-8.2f%-8.2f%-8.2f%-8.2f",a[0],a[1],a[2],a[L-1]);getchar();}break;}case 14:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{xiugai(head);break;}case 15:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_avrage(a);printf("平均值保存成功!");getchar();break;}case 16:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=t_ji_tj(head);if(k>0){printf("符合条件的有%3d 名学生!",k);getchar();}else if(k==0){printf("没有符合条件的学生!");getchar();}else if(k==-2)getchar();break;}default :printf("输入有误,请重新输入!");getchar();break;}}}//输出单个的学生数据void printf_(struct stu *p0){int i;printf("学号:");puts(p0->num);printf("姓名:");puts(p0->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p0->ch_ji[i]);printf("\n");}//接收单个的学生数据,返回指针,struct stu * scanf1_(){int i,sum=0;struct stu *p0;p0=(struct stu *)malloc(sizeof(struct stu));printf("请输入学生的学号:");gets(p0->num);printf("请输入学生的姓名:");gets(p0->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p0->ch_ji[i]);sum+=p0->ch_ji[i];}getchar();p0->ch_ji[L-1]=sum;return p0;}//得到学生的数据,并放入到链表中struct stu * scanf_(){struct stu *p1,*p2,*head;int i,sum=0,n=0;printf("注意:当学生学号为0 时输入结束\n\n");p1=(struct stu *)malloc(sizeof(struct stu)); /*得到学生信息*/head=p2=p1;do{ printf("请输入学生的学号:");gets(p1->num);if(strcmp(p1->num,"0")==0)break;printf("请输入学生的姓名:");gets(p1->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p1->ch_ji[i]);sum+=p1->ch_ji[i];}getchar();printf("\n");p1->ch_ji[L-1]=sum;sum=0;p1=(struct stu *)malloc(sizeof(struct stu));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("成绩输入结束!\n");getchar();/*学生的数据被放在链表中*/return head;}/*输出链表中的学生信息*/void print_(struct stu *head){int i;struct stu *p1,*p2;p1=p2=head;while(p1->next!=NULL){printf("学号:");puts(p1->num);printf("姓名:");puts(p1->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p1->ch_ji[i]);printf("\n");p1=p2->next;p2=p1;}getchar();}/*用链表给学生排序*/struct stu *num_paixu(struct stu *head){struct stu *p1,*p2,*p3,*p4,*p5,*p6,*p7;int x=1;for(p1=head;p1->next!=NULL;p4=p1,p1=p1->next){p3=p1;for(p2=p1->next,p5=p7=p2;p2->next!=NULL;p7=p2,p2=p2->next){if(strcmp(p3->num,p2->num)>0){p3=p2;p5=p7;}}if(p3!=p1){if(x&&p1==head){p6=p1->next;p1->next=p3->next;p3->next=p6;p5->next=p1;head=p3;p1=p3;x=0;}else{p6=p1->next;p1->next=p3->next;p3->next=p6;p4->next=p3;p5->next=p1;p1=p3;}}printf("排序成功!\n");return head;}//根据学生的学号查询学生的信息,并把学生的数据输出void chaxun(struct stu *head){char a[N];struct stu *p1;printf("请输入要查询的学号:");gets(a);p1=head;while(p1->next!=NULL){if(strcmp(p1->num,a)==0)break;p1=p1->next;}if(p1->next==NULL)printf("没有找到学号为%s 的学生!\n",a);else{printf("要查询的学生信息如下:\n\n");printf_(p1);}}//将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。
数据结构 利用单链表实现学生基本信息管理 课程设计 实验报告
数据结构课程设计设计题目:利用单链表实现学生基本信息管理目录课题名称利用单链表实现学生基本信息管理院系年级专业学号姓名成绩课题设计目的与设计意义课题设计目的:(1)学会单链表结点的定义(2)掌握单链表的基本运算,熟悉对单链表的一些基本操作和具体函数的定义。
(3)加深对链表的理解,逐步培养解决实际问题的编程能力(4)创建一个初始链表,通过调用定义的基本操作函数来实现单链表上的插入、删除元素等操作。
调试程序并对相应的输出做出分析;修改输入数据,预期输出并验证输出的结果。
加深对有关意义:一般来讲,课程设计教学实验复杂一些,深度更广并且更加接近实用.通过课程设计的综合训练,培养学生实际分析问题,编程和动手能力,使学生对数据结构进行更深一层的了解,培养同学们对学习数据结构这门课程的兴趣, 让同学们学会如何去查找资料和整合处理这些资料的能力, 也为以后的大学毕业设计论文打下了一个初步的基础.这些课程设计都是比较难的,要分成几个小项目, 几个学生一组, 培养团队协作精神. 最终帮助学生系统掌握课程的主要内容, 更好地完成教学任务. 基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握数据结构的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题.指导教师:年月日一:课程设计目的和意义...................................................................................................... - 1 -1、课程设计目的:............................................................................................................ - 1 -2、课程设计意义:............................................................................................................ - 1 - 二:需求分析与要求:.......................................................................................................... - 1 -1、程序功能:.................................................................................................................... - 1 -2、基本要求:.................................................................................................................... - 2 -3、功能要求:.................................................................................................................... - 2 -(1)信息录入功能:................................................................................................ - 2 -(2)查询功能:........................................................................................................ - 2 -(3)插入功能:........................................................................................................ - 2 -(4)删除功能:........................................................................................................ - 2 -(5)输出功能:........................................................................................................ - 2 -4、说明:............................................................................................................................ - 2 -5、输入输出的形式:........................................................................................................ - 3 -6、开发环境:.................................................................................................................... - 3 -三、概要设计:.......................................................................................................................... - 3 -四、模块图:.............................................................................................................................. - 5 -五、详细设计:.......................................................................................................................... - 5 -六、运行结果与分析:.......................................................................................................... - 10 -1 、主界面........................................................................................................................ - 10 -2.建立学生信息表............................................................................................................ - 11 -3、查询某学生的所有信息。
链表实现学生管理系统
链表实现学⽣管理系统makefilemain : main.o stu.o llist.ogcc -Wall -o $@ $^clean :rm -rf main *.o头⽂件llist.h#ifndef __LLIST_H#define __LLIST_Henum a{HEADINSERT,TAILINSERT};typedef void (llist_print)(const void *data);typedef int (llist_cmp)(const void *data, const void *cp);typedef void LLIST;LLIST *llist_handler(int size);int llist_insert(LLIST *h, const void *data, int mode);int llist_delect(LLIST *h, const void *data, llist_cmp cmp);void *llist_find(LLIST *h, const void *data, llist_cmp cmp);void *llist_display(LLIST *h, llist_print print);void *llist_destroy(LLIST *h);int llist_fetch(LLIST *handler, void *b_data, llist_cmp cmp, void *save);int llist_output(LLIST *h, void *save);#endifstu.h#ifndef __STU_H#define __STU_H#include "llist.h"struct stu{int id;char name[20];long int tel;};void insert_data(LLIST *handler);int delect_data(LLIST *handler);int fetch_data(LLIST *handler);int find_data(LLIST *handler);void display_data(LLIST *handler);void sort_data(LLIST *handler);int save_data(LLIST *handler);int read_data(LLIST *handler);#endifllist.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include "llist.h"struct llist_node{struct llist_node *prev;struct llist_node *next;char data[0];};struct head_node{int size;struct llist_node node;};LLIST *llist_handler(int size){struct head_node *handler = NULL;handler = malloc(sizeof(LLIST));if(handler == NULL)return NULL;handler->size = size;handler->node.prev = handler->node.next = &handler->node; return handler;}int llist_insert(LLIST *h, const void *data, int mode){struct head_node *handler = h;struct llist_node *newnode = NULL;struct llist_node *p = &handler->node;newnode = malloc(sizeof(struct llist_node) + handler->size); if(newnode == NULL)return -1;memcpy(newnode->data, data, handler->size);switch(mode){case HEADINSERT : break;case TAILINSERT : p = p->prev;break;default : free(newnode);break;}newnode->next = p->next;newnode->prev = p->next->prev;newnode->prev->next = newnode;newnode->next->prev = newnode;return0;}struct llist_node *_find(LLIST *h, const void *data, llist_cmp cmp){struct head_node *handler = h;struct llist_node *cur = NULL;for(cur = handler->node.next; cur != &handler->node; cur = cur->next) {if(cmp(cur->data, data))return cur;}return NULL;}void *llist_find(LLIST *h, const void *data, llist_cmp cmp){struct head_node *handler = h;struct llist_node *find = NULL;find = _find(handler, data, cmp);if(NULL == find)return NULL;return find->data;}int llist_delect(LLIST *h, const void *data, llist_cmp cmp){struct head_node *handler = h;struct llist_node *find = NULL;find = _find(handler, data, cmp);if(NULL == find)return -1;find->prev->next = find->next;find->next->prev = find->prev;free(find);}void *llist_display(LLIST *h, llist_print print){struct head_node *handler = h;struct llist_node *cur = handler->node.next;while(cur != &handler->node){print(cur->data);cur = cur->next;}}void *llist_destroy(LLIST *h){struct head_node *handler = h;struct llist_node *p = NULL;struct llist_node *cur = NULL;for(p = handler->node.next; p != &handler->node; p = p->next) {cur = p;p->next->prev = p->prev;p->prev->next = p->next;free(p);p = cur;}free(handler);}int llist_fetch(LLIST *h, void *b_data, llist_cmp cmp, void *save) {struct head_node *handler = h;struct llist_node *cur = NULL;struct llist_node *find = NULL;find = _find(handler, b_data, cmp);if(NULL == find)return -1;memcpy(save, find->data, handler->size);find->next->prev = find->prev;find->prev->next = find->next;free(find);}int llist_output(LLIST *h, void *save){struct head_node *handler = h;struct llist_node *cur = handler->node.next;if(cur == &handler->node)return -1;cur->next->prev = cur->prev;cur->prev->next = cur->next;memcpy(save, cur->data, handler->size);free(cur);}stu.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include "stu.h"static int a, ret, b, bnum, num;static char name[20];static char bname[20];static long int tel, lbnum, lnum;void print(const void *data) //打印函数{const struct stu *p = data;printf("%d %s %ld\n", p->id, p->name, p->tel);}int id_cmp(const void *data, const void *cp) //id对⽐函数{const struct stu *p = data;const int *cur = cp;return !(p->id - *cur);}int tel_cmp(const void *data, const void *cp){const struct stu *p = data;const long int *cur = cp;return !(p->tel - *cur);}int name_cmp(const void *data, const void *cp) //名字对⽐函数{const struct stu *p = data;const char *cur = cp;return !(strcmp(cur, p->name));}void insert_data(LLIST *handler) //增加数据函数{struct stu data;struct stu *find = NULL;system("clear");printf("请输⼊学号:\n");scanf("%d", &num);find = llist_find(handler, &num, id_cmp);if(find != NULL){printf("该学号已存在,请核对后从新输⼊!\n");sleep(2);return ;}data.id = num;printf("请输⼊学⽣姓名:\n");scanf("%s", name);memcpy(, name, 20);printf("请输⼊学⽣电话:\n");scanf("%ld", &tel);data.tel = tel;ret = llist_insert(handler, &data, HEADINSERT);if(ret < 0)printf("未能成功添加学⽣信息。
链表实现学生学籍管理系统
#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 15 //学号位数#define M 15 //姓名字节数#define L 4 //成绩的科数int aa=0;//记录筛选时打开的文void printf_(struct stu *); //输出单个的学生数据struct stu * scanf1_(); //接收单个的学生数据,返回指针,struct stu * scanf_(); //得到学生的数据,并放入到链表中void print_(struct stu *); //输出链表中的学生信息struct stu *num_paixu(struct stu *); //用链表给学生排序void chaxun(struct stu *); //根据学生的学号查询学生的信息,并把学生的数据输出struct stu * charu(struct stu *); //将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。
struct stu * shanchu(struct stu *); //删除数据void xiugai(struct stu *); //修改学生的信息。
void fprint_(struct stu *); //把数据写入到文件int to_ji(struct stu *); //统计学生的总人数int t_ji_tj(struct stu *); //统计成绩在某一区间内的人数struct stu * ch_ji_paixu(struct stu *); //按成绩排序,默认的是按总成绩排序struct s *shaixuan(struct stu *); //筛选符合条件的数据,得到符合条件的结构体数据的指针。
void shuchu_shai(struct s *); //输出筛选出来的数据void fb_shu_shai(struct s *); //将筛选出来的数据输入到文件中void avrage(struct stu *head,float *); //计算平均成绩void fb_avrage(float *); //将平均成绩放在文件的最后面//建立学生结构体struct stu{char num[N];char name[M];int ch_ji[L];struct stu *next;};//建立一个链表,存放学生结构体的指针struct s{struct stu *p;struct s *ps;};void main(){int i,n,x=1,k=0;float a[L]={0};struct stu *head=NULL;struct s *shead=NULL;char ch;while(x){ system("cls");printf("******************************************************************* ************\n");printf(" 0---退出系统 1---录入数据\n");printf(" 2---保存文件 3---按成绩排序 \n");printf(" 4---查看信息 5---按学号排序 \n");printf(" 6---统计人数 7---按条件筛选 \n");printf(" 8---查询信息 9---显示筛选结果 \n");printf(" 10---插入数据 11---保存筛选结果 \n");printf(" 12---删除数据 13---计算平均成绩 \n");printf(" 14---修改数据 15---保存平均成绩 \n");printf(" 16---按条件统计人数\n");printf("******************************************************************* ************\n");scanf("%d",&n);getchar();//有啥作用switch(n){case 0:x=0;break;case 1:head=scanf_();break;case 2:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsefprint_(head);break;case 3:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=ch_ji_paixu(head);break;}case 4:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elseprint_(head);break;case 5:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=num_paixu(head);printf("是否显示排序结果 Y/N ?");ch=getchar();getchar();if(ch=='y'||ch=='Y'){printf("\n");print_(head);}}case 6:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=to_ji(head);printf("总共有%3d 名学生",k);getchar();break;}case 7:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{shead=shaixuan(head);if(shead!=NULL&&shead->ps!=NULL){printf("是否显示筛选结果 Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n");shuchu_shai(shead);getchar();}}break;}case 8:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();}else{chaxun(head);getchar();break;}case 9:if(head==NULL||head->next==NULL) {printf("请先录入学生的数据!");getchar();break;}else{printf("\n");shuchu_shai(shead);getchar();break;}case 10:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsehead=charu(head);break;case 11:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_shu_shai(shead);getchar();break;}case 12:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=shanchu(head);break;}case 13:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{avrage(head,a);printf("平均值计算成功!\n是否显示平均成绩 Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n 语文数学英语总成绩\n");printf("%-8.2f%-8.2f%-8.2f%-8.2f",a[0],a[1],a[2],a[L-1]);getchar();}break;}case 14:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{xiugai(head);break;}case 15:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_avrage(a);printf("平均值保存成功!");getchar();break;}case 16:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=t_ji_tj(head);if(k>0){printf("符合条件的有%3d 名学生!",k);getchar();}else if(k==0){printf("没有符合条件的学生!");getchar();}else if(k==-2)getchar();break;}default :printf("输入有误,请重新输入!");getchar();break;}}}//输出单个的学生数据void printf_(struct stu *p0){int i;printf("学号:");puts(p0->num);printf("姓名:");puts(p0->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p0->ch_ji[i]);printf("\n");}//接收单个的学生数据,返回指针,struct stu * scanf1_(){int i,sum=0;struct stu *p0;p0=(struct stu *)malloc(sizeof(struct stu));printf("请输入学生的学号:");gets(p0->num);printf("请输入学生的姓名:");gets(p0->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p0->ch_ji[i]);sum+=p0->ch_ji[i];}getchar();p0->ch_ji[L-1]=sum;return p0;}//得到学生的数据,并放入到链表中struct stu * scanf_(){struct stu *p1,*p2,*head;int i,sum=0,n=0;printf("注意:当学生学号为 0 时输入结束\n\n");p1=(struct stu *)malloc(sizeof(struct stu)); /*得到学生信息*/ head=p2=p1;do{ printf("请输入学生的学号:");gets(p1->num);if(strcmp(p1->num,"0")==0)break;printf("请输入学生的姓名:");gets(p1->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p1->ch_ji[i]);sum+=p1->ch_ji[i];}getchar();printf("\n");p1->ch_ji[L-1]=sum;sum=0;p1=(struct stu *)malloc(sizeof(struct stu));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("成绩输入结束!\n");getchar();/*学生的数据被放在链表中*/return head;}/*输出链表中的学生信息*/void print_(struct stu *head){int i;struct stu *p1,*p2;p1=p2=head;while(p1->next!=NULL){printf("学号: ");puts(p1->num);printf("姓名: ");puts(p1->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p1->ch_ji[i]);printf("\n");p1=p2->next;p2=p1;}getchar();}/*用链表给学生排序*/struct stu *num_paixu(struct stu *head){struct stu *p1,*p2,*p3,*p4,*p5,*p6,*p7;int x=1;for(p1=head;p1->next!=NULL;p4=p1,p1=p1->next){p3=p1;for(p2=p1->next,p5=p7=p2;p2->next!=NULL;p7=p2,p2=p2->next){if(strcmp(p3->num,p2->num)>0){p3=p2;p5=p7;}}if(p3!=p1){if(x&&p1==head){p6=p1->next;p1->next=p3->next;p3->next=p6;p5->next=p1;head=p3;p1=p3;x=0;}else{p6=p1->next;p1->next=p3->next;p3->next=p6;p4->next=p3;p5->next=p1;p1=p3;}}printf("排序成功!\n");return head;}//根据学生的学号查询学生的信息,并把学生的数据输出void chaxun(struct stu *head){char a[N];struct stu *p1;printf("请输入要查询的学号:");gets(a);p1=head;while(p1->next!=NULL){if(strcmp(p1->num,a)==0)break;p1=p1->next;}if(p1->next==NULL)printf("没有找到学号为 %s 的学生!\n",a);else{printf("要查询的学生信息如下:\n\n");printf_(p1);}}//将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。
学生信息管理系统-顺序表链表(数据结构第一次作业)
学⽣信息管理系统-顺序表链表(数据结构第⼀次作业)实验⽬的:1 、掌握线性表的定义;2 、掌握线性表的基本操作,如建⽴、查找、插⼊和删除等。
实验内容:定义⼀个包含学⽣信息(学号,姓名,成绩)的的顺序表和链表,使其具有如下功能:(1) 根据指定学⽣个数,逐个输⼊学⽣信息;(2) 逐个显⽰学⽣表中所有学⽣的相关信息;(3) 根据姓名进⾏查找,返回此学⽣的学号和成绩;(4) 根据指定的位置可返回相应的学⽣信息(学号,姓名,成绩);(5) 给定⼀个学⽣信息,插⼊到表中指定的位置;(6) 删除指定位置的学⽣记录;(7) 统计表中学⽣个数。
参考信息:Definition of structure student :typedef struct {char no[8]; //8 位学号char name[20]; // 姓名int price; // 成绩}Student;Definition of sequential list:typedef struct {Student *elem; // 指向数据元素的基地址int length; // 线性表的当前长度}SqList ;Definition of linked list :typedef struct LNode{Student data; // 数据域struct LNode *next; // 指针域}LNode,*LinkList;实验要求:(1) 程序要添加适当的注释,程序的书写要采⽤缩进格式。
(2) 程序要具在⼀定的健壮性,即当输⼊数据⾮法时,程序也能适当地做出反应,如插⼊删除时指定的位置不对等等。
(3) 程序要做到界⾯友好,在程序运⾏时⽤户可以根据相应的提⽰信息进⾏操作。
(4) 上传源程序到课堂派。
顺序表的源程序保存为SqList.cpp,链表的源程序保存为LinkList.cpp。
顺序表的源程序:#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#define OK 1#define ERROR 0#define OVERFLOW -2#define MAXSIZE 100typedef int Status; // 定义函数返回值类型typedef struct{char no[10]; // 学号char name[20]; // 姓名int score; // 成绩}student;typedef student ElemType;typedef struct{ElemType *elem; // 存储空间的基地址int length; // 当前长度}SqList;Status InitList(SqList *L) // 构造空的顺序表 Lif(!L->elem) exit(OVERFLOW);L->length=0;return OK;}ElemType GetElem(SqList &L,int i) // 访问顺序表,找到 i位置,返回给 e{return L.elem[i];}int Search(SqList &L,char str[]) // 根据名字查找,返回该同学在顺序表中的编号{for(int i=1;i<=L.length;i++){if(strcmp(L.elem[i].name,str)==0)return i;}return0;}Status ListInsert(SqList &L,int i,ElemType e) // 在 i位置插⼊某个学⽣的信息{if((i<1)||(i>L.length+1)) return ERROR;if(L.length==MAXSIZE) return ERROR;for(int j=L.length;j>=i;j--){L.elem[j+1]=L.elem[j];}L.elem[i]=e;++L.length;return OK;}Status ListDelete(SqList &L,int i) // 在顺序表中删除 i位置的学⽣信息{if((i<1)||(i>L.length)) return ERROR;for(int j=i;j<=L.length;j++){L.elem[j]=L.elem[j+1];}--L.length;return OK;}void Input(ElemType *e){printf("姓名:"); scanf("%s",e->name);printf("学号:"); scanf("%s",e->no);printf("成绩:"); scanf("%d",&e->score);printf("输⼊完成\n\n");}void Output(ElemType *e){printf("姓名:%-20s\n学号:%-10s\n成绩:%-10.2d\n\n",e->name,e->no,e->score); }int main(){SqList L;ElemType a,b,c,d;printf("------------10.2.34版-----------\n");puts("1. 构造顺序表");puts("2. 录⼊指定⼈数的学⽣信息");puts("3. 显⽰学⽣表中的所有信息");puts("4. 根据姓名查找该学⽣,并返回学号和成绩");puts("5. 根据某指定位置显⽰该学⽣信息");puts("6. 在指定位置插⼊学⽣信息");puts("7. 在指定位置删除学⽣信息");puts("8. 统计学⽣个数");puts("0. 退出");printf("------------------------\n");int x,choose;while(1){puts("请输⼊你要选择的功能前的序号:");scanf("%d",&choose);if(choose==0) break;switch(choose){case1:if(InitList(&L))printf("成功建⽴顺序表\n\n");printf("顺序表建⽴失败\n\n");break;case2:printf("请输⼊要录⼊学⽣的⼈数(⼩于100):"); scanf("%d",&x);for(int i=1;i<=x;i++){printf("第%d个学⽣:\n",i);Input(&L.elem[i]);}L.length=x;puts("");break;case3:for(int i=1;i<=x;i++){a=GetElem(L,i);Output(&a);}break;case4:char s[20];printf("请输⼊要查找的学⽣姓名:");scanf("%s",s);if(Search(L,s))Output(&L.elem[Search(L,s)]);elseputs("对不起,查⽆此⼈");puts("");break;case5:printf("请输⼊要查询的位置:");int id1;scanf("%d",&id1);b=GetElem(L,id1);Output(&b);break;case6:printf ("请输⼊要插⼊的位置:");int id2;scanf("%d",&id2);printf("请输⼊学⽣信息:\n");Input(&c);if(ListInsert(L,id2,c)){x++;puts("插⼊成功");puts("");}else{puts("插⼊失败");puts("");}break;case7:printf("请输⼊要删除的位置:");int id3;scanf("%d",&id3);if(ListDelete(L,id3)){x--;puts("删除成功");puts("");}else{puts("删除失败");puts("");}break;case8:printf("已录⼊的学⽣个数为:%d\n\n",L.length);break;}}printf("\n\n谢谢您的使⽤,请按任意键退出\n\n\n");system("pause");return0;}#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#define OK 1#define ERROR 0#define OVERFLOW -2#include<iostream>using namespace std;typedef int Status; // 定义函数返回值类型typedef struct{char no[10]; // 学号char name[20]; // 姓名double score; // 成绩}student;typedef student ElemType;typedef struct LNode{ElemType data; // 数据域struct LNode *next; //指针域}LNode,*LinkList;Status InitList(LinkList &L) // 构造空链表 L{L=(struct LNode*)malloc(sizeof(struct LNode));L->next=NULL;return OK;}Status GetElem(LinkList L,int i,ElemType &e) // 访问链表,找到 i位置的数据域,返回给 e {LinkList p;p=L->next;int j=1;while(p&&j<i){p=p->next;++j;}if(!p||j>i) return ERROR;e=p->data;return OK;}Status Search(LNode L,char str[],LinkList &p) // 根据名字查找{p=L.next;while(p){if(strcmp(p->,str)==0)return OK;p=p->next;}return ERROR;}Status ListInsert(LinkList L,int i,ElemType e) // 在 i个位置插⼊某个学⽣的信息{LinkList p,s;p=L;int j=0;while(p&&j<i-1){p=p->next;++j;}if(!p||j>i-1) return ERROR;s=(struct LNode*)malloc(sizeof(LNode));s->data=e;s->next=p->next;p->next=s;return OK;}Status ListDelete(LinkList p,int i) // 删除 i位置的学⽣信息{int j=0;while((p->next)&&(j<i-1))++j;}if(!(p->next)||(j>i-1)) return ERROR;LinkList q;q=p->next;p->next=q->next;delete q;return OK;}void Input(ElemType *e){cout<<"姓名:";cin>>e->name;cout<<"学号:";cin>>e->no;cout<<"成绩:";cin>>e->score;cout<<"完成输⼊\n\n";}void Output(ElemType *e){printf("姓名:%-20s\n学号:%-10s\n成绩:%-10.2lf\n\n",e->name,e->no,e->score); }int main(){LNode L;LinkList p;ElemType a,b,c,d;cout<<"------------10.2.34版 -----------\n";cout<<"1. 构造顺序表\n";cout<<"2. 录⼊指定⼈数的学⽣信息\n";cout<<"3. 显⽰学⽣表中的所有信息\n";cout<<"4. 根据姓名查找该学⽣,并返回学号和成绩\n";cout<<"5. 根据某指定位置显⽰该学⽣信息\n";cout<<"6. 在指定位置插⼊学⽣信息\n";cout<<"7. 在指定位置删除学⽣信息\n";cout<<"8. 统计学⽣个数\n";cout<<"0. 退出\n";cout<<"------------------------\n";int n,choose=-1;while(choose!=0){puts("请输⼊你要选择的功能前的序号:");cin>>choose ;if(choose==0)break;else if (choose==1){if(InitList(p))cout<<"建⽴顺序表成功\n";elsecout<<"建⽴顺序表失败\n";}else if (choose==2){cout<<"将要输⼊学⽣的⼈数:";cin>>n;for(int i=1;i<=n;i++){printf("第%d个学⽣:\n",i);Input(&a);ListInsert(&L,i,a);}}else if (choose==3){for(int i=1;i<=n;i++){GetElem(&L,i,b);Output(&b);}}else if (choose==4)cout<<"请输⼊要查找的学⽣姓名:";cin>>s;if(Search(L,s,p))Output(&(p->data));elsecout<<"对不起,查⽆此⼈";puts("");}else if (choose==5){cout<<"请输⼊要查询的位置:";int id1;cin>>id1;GetElem(&L,id1,c);Output(&c);}else if (choose==6){cout<<"请输⼊要插⼊的位置:";int id2;cin>>id2;cout<<"请输⼊学⽣信息:\n";Input(&d);if(ListInsert(&L,id2,d)){n++;cout<<"插⼊成功"; ;puts("");}else{cout<<"插⼊失败";puts("");}}else if (choose==7){cout<<"请输⼊要删除的位置:";int id3;cin>>id3;if(ListDelete(&L,id3)){n--;cout<<"删除成功";puts("");}else{cout<<"删除失败";puts("");}}else if (choose==8){cout<<"已录⼊的学⽣个数为:"<<n<<endl;break;}}cout<<"\n\n谢谢您的使⽤,请按任意键退出\n\n\n"; system("pause");return0;}。
C语言学生管理系统(链表)
学生管理系统#define_CRT_SECURE_NO_WARNINGS#include〈stdio。
h〉#include<stdlib。
h〉#include〈string.h〉void AppendNode(long long studentID,char studentName[10],char studentSex[4],int score[4]);//添加数据void DisplayNode(struct link*head);//显示数据void InsertNode(long long studentID,char studentName[10],char studentSex[4],int score[4]);//插入一条数据;按总分的从大到小排序void InsertNodeNumber(long long studentID,char studentName [10],char studentSex[4],int score[4]);//按学号的从小到大排序void NumberSorting(int flag);//按从大到小对数据进行排序;1、对总分进行排序,2、对学号进行排序void DeleteNodeID();//输入学号删除void DeleteNodeName();//输入学号删除void DeleteMemory(struct link*head);//删除聊表所占用的内存;void Save();//保存数据void Open();//打开数据void FindID();//按学号查找学生void FindName();//按姓名查找学生;void Menu();typedef struct student{long long studentID;char studentName[10];char studentSex[4];int score[4];}STU;struct link{STU student;struct link*next;};struct link*head=NULL;//保存输入的学生信息数据struct link*head1=NULL;//保存排序后的学生信息数据int main(){long long studentID;char studentName[10];char studentSex[4];int score[4];//定义要输入学生信息的变量;char c;int menu;//保存要进行的选项;Open();while(1){system(”pause”);Menu();printf(”请输入要进行的操作:");scanf("%d”,&menu);switch(menu){case0:exit(0);break;case1:printf(”请输入Y或y来添加数据\n”);scanf(” %c”,&c);while(c==’y’||c=='Y’){printf("请输入学生学号:");scanf("%lld”,&studentID);printf("请输入学生姓名:”);scanf(”%s”,&studentName);printf(”请输入学生性别:");scanf("%s",&studentSex);int i=0;printf("请分别输入学生四门课的成绩:");for(i=0;i〈4;i++){scanf(”%d”,&score[i]);}AppendNode(studentID,studentName,studentSex, score);printf(”请输入Y或y来添加数据\n”);scanf(”%c",&c);}DisplayNode(head);break;case2:FindID();break;case3:FindName();break;case4:DeleteNodeID();break;case5:DeleteNodeName();case6:NumberSorting(1);DeleteMemory(head1);head1=NULL;break;case7:NumberSorting(2);DeleteMemory(head1);head1=NULL;break;default:printf("输入有误!请重新输入”);}}Save();DeleteMemory(head);DeleteMemory(head1);system("pause”);}void AppendNode(long long studentID,char studentName[10],char studentSex[4],int score[4]){struct link*p=NULL,*pr=head;p=(struct link*)malloc(sizeof(struct link));if(p==NULL){printf("申请内存失败");return;}if(head==NULL){head=p;}else{while(pr—>next!=NULL){pr=pr—〉next;}pr->next=p;}p->student.studentID=studentID;strcpy(p—>student.studentName,studentName);strcpy(p->student.studentSex,studentSex);p-〉student.score[0]=score[0];p—〉student。
数据结构-学生信息管理系统
//该程序健壮性不强,使用时请注意输入在链表以外的数值会发生错误!谨记#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct student{int age;int score;char name[10];struct student *next;}st1;void creat(st1 *head);//创建链表void print(st1* head);//打印链表st1* find(st1 *head,int index);//链表查找st1* insert(st1 *head);//插入信息void interface ();//主菜单void dele(st1 *head);//删除信息void change(st1 *head);//修改信息void reverse(st1 *head);//反序输入信息void sort(st1* head);//链表排序(用值交换的方式)void interface (){int i;printf("\n");for(i=0;i<20;i++)printf("====");printf("\n");printf(" * 学生信息管理系统*\n");printf("\n");printf(" 请选择你的操作\n");for(i=0;i<20;i++)printf("====");printf("\n");printf("\n");for(i=0;i<3;i++)printf(" ");for(i=0;i<7;i++)printf("*****");printf("\n");printf(" * 1. 初始化系统信息* \n");printf(" * 2. 插入学生信息* \n");printf(" * 3. 删除学生信息* \n");printf(" * 4. 修改学生信息* \n");printf(" * 5. 查找学生信息* \n");printf(" * 6. 显示所有学生信息* \n");printf(" * 7. 逆序显示学生信息* \n");printf(" * 0. 退出系统* \n");for(i=0;i<3;i++)printf(" ");for(i=0;i<7;i++)printf("*****");printf("\n");printf("\n");for(i=0;i<20;i++)printf("====");printf("\n");printf("请输入以上序号(0-7):");}int main(){int k;int a;int i;int index;//用于选择int exit=1;int choose;//用于判断st1 *head=NULL,*p;head = (st1*)malloc(sizeof(st1));//分配头指针空间do{system("cls");interface();scanf("%d",&a);system("cls");if(a==0)//退出系统{for(k=1;k>0;k--){ system("cls");printf(" 正在退出系统,请稍等");for(i=0;i<89999999;i++){};printf("....");for(i=0;i<89999999;i++){};}printf("\n\n");printf("是否退出系统(1/0):");scanf("%d",&choose);if(choose==1){ system("cls");exit=0;for(i=0;i<3;i++)printf(" ");printf("\n\n\n\n");for(i=0;i<89999999;i++){};printf(" 欢迎下次使用学生信息管理系统!!!!\n\n\n");}}switch(a)//选择7以内的数字进行链表操作system("cls");{case 1://创建链表printf("\n");for(i=0;i<20;i++)printf("====");printf("\n * 初始化系统信息*\n\n");for(i=0;i<20;i++)printf("====");printf("\n");creat(head);printf("\n初始化信息完毕!,请输入1返回主菜单:");scanf("%d",&choose);while(choose!=1){printf("请输入1返回主菜单:");scanf("%d",&choose);}break;case 2://插入学生信息printf("\n");for(i=0;i<20;i++)printf("====");printf("\n * 插入学生信息*\n\n");for(i=0;i<20;i++)printf("====");printf("\n");insert(head);printf("\n插入学生信息完毕!,请输入1返回主菜单:");scanf("%d",&choose);while(choose!=1){printf("请输入1返回主菜单:");scanf("%d",&choose);}break;case 3://删除学生信息printf("\n");for(i=0;i<20;i++)printf("====");printf("\n * 删除学生信息*\n\n");for(i=0;i<20;i++)printf("====");printf("\n");dele(head);printf("\n删除信息完毕,请输入1返回主菜单:");scanf("%d",&choose);while(choose!=1){printf("请输入1返回主菜单:");scanf("%d",&choose);}break;case 4://修改信息printf("\n");for(i=0;i<20;i++)printf("====");printf("\n * 修改学生信息*\n\n");for(i=0;i<20;i++)printf("====");printf("\n");change(head);printf("\n修改信息完毕!,请输入1返回主菜单:");scanf("%d",&choose);while(choose!=1){printf("请输入1返回主菜单:");scanf("%d",&choose);}break;case 5://查找学生信息printf("\n");for(i=0;i<20;i++)printf("====");printf("\n * 查找学生信息*\n\n");for(i=0;i<20;i++)printf("====");printf("\n");printf("输入你要查找第几位学生:");scanf("%d",&index);p = find(head,index);//查找学生信息并返回地址printf("姓名:%s 年龄:%d 分数:%d\n",p->name,p->age,p->score); printf("\n查找信息完毕!,请输入1返回主菜单:");scanf("%d",&choose);while(choose!=1){printf("请输入1返回主菜单:");scanf("%d",&choose);}break;case 6: //排序printf("\n");for(i=0;i<20;i++)printf("====");printf("\n * 显示所有学生信息*\n\n");for(i=0;i<20;i++)printf("====");printf("\n");sort(head);print(head);//打印排序后的学生信息printf("\n信息输出完毕!,请输入1返回主菜单:");scanf("%d",&choose);while(choose!=1){printf("请输入1返回主菜单:");scanf("%d",&choose);}break;case 7://链表反转printf("\n");for(i=0;i<20;i++)printf("====");printf("\n * 逆序显示学生信息*\n\n");for(i=0;i<20;i++)printf("====");printf("\n");reverse(head);printf("\n信息输出完毕!,请输入1返回主菜单:");scanf("%d",&choose);while(choose!=1){printf("请输入1返回主菜单:");scanf("%d",&choose);}break;default :break;}}while(1&&exit);}void creat(st1* head)int i;int n;st1 *p,*q;printf("输入学生人数:");scanf("%d",&n);for(i=0;i<n;i++){printf("输入第%d个学生信息:\n",i+1);p = (st1*)malloc(sizeof(st1));printf("输入姓名:");scanf("%s",&p->name);printf("输入年龄:");scanf("%d",&p->age);printf("输入分数:");scanf("%d",&p->score);printf("输入第%d个学生信息完成",i+1); printf("\n\n");if(0 == i){head->next = p;}else{q->next = p;}q = p;}p->next = NULL;}void print(st1* head){st1* x;x = head->next ;printf("学生信息如下:\n");while(x){printf("姓名:%s 年龄:%d 分数:%d\n",x->name,x->age,x->score); x = x->next ;}printf("\n");}st1* find(st1 *head,int idex){st1 *p;int i=1;p = head->next ;while(p ){if(i<idex){p = p->next ;i++;}elsereturn p;}return p;}st1* insert(st1* head){st1 *newst,*p;int i = 1;int index;printf("要插入的位置:");scanf("%d",&index);//所要插入第几位学生信息p = head->next ;newst = (st1*)malloc(sizeof(st1));printf("输入姓名:");scanf("%s",&newst->name);printf("输入年龄:");scanf("%d",&newst->age);printf("输入分数:");scanf("%d",&newst->score);printf("输入学生信息完成\n\n");if(1 == index){st1 *q = head->next ;head->next = newst;newst->next = q;}elsewhile( p ){if(i == (index-1)){st1 *q = p->next ;p->next = newst;newst->next = q;}p = p->next ;i++;}return p;}void dele(st1* head){st1 *p,*q;int i =1 ;int index;printf("输入删除第几位学生信息:");scanf("%d",&index);//所要删除第几位学生信息p = head->next ;if(1 == index){p = head->next ;head->next = p->next;free(p);p = NULL;}elsewhile(p){if(i ==(index-1)){q = p->next ;p->next = q->next ;free(q);}p = p->next ;i++;}printf("第%d位学生信息已经删除\n",index);}void change(st1 *head){st1 *p = NULL;int a ;printf("输入修改第几位学生信息:\n");scanf("%d",&a);p =find(head ,a);//修改之前调用find函数找到该学生信息printf("输入姓名:");scanf("%s",&p->name);printf("输入年龄:");scanf("%d",&p->age);printf("输入分数:");scanf("%d",&p->score);printf("输入学生信息完成\n");}void reverse(st1 *head){st1 *p = head->next,*q;head->next = NULL;while(p != NULL){q = p->next;p->next = head->next;head->next = p;p = q;}print(head);//打印学生信息}void sort(st1 *head){st1 *p,*q;int m ;int temp;//交换score临时变量int temp1;//交换age临时变量char temp2[10];//交换name临时变量printf("选择 1.按成绩 2.按年龄排序\n"); scanf("%d",&m);switch(m){case 1:for(p = head;p != NULL; p = p-> next) {for (q = p->next;q != NULL; q = q-> next ) {if(p->score>q->score){temp = q->score;q->score = p->score;p->score =temp;temp1 = q->age;q->age = p->age;p->age =temp1;strcpy(temp2,q->name);strcpy(q->name,p->name);strcpy(p->name,temp2);}}}break;case 2:for(p = head;p != NULL; p = p-> next) {for (q = p->next;q != NULL; q = q-> next ) {if(p->age>q->age){temp = q->score;q->score = p->score;p->score =temp;temp1 = q->age;q->age = p->age;p->age =temp1;strcpy(temp2,q->name);strcpy(q->name,p->name);strcpy(p->name,temp2);} }} break; }}。
学生信息管理系统(链表)
#include <stdio.h>#include <string.h>#include <malloc.h>struct shengri{int year;int month;int day;};struct student{char name[40];char sex[5];char sno[20];char telephone[20];char sid[40];struct shengri birth;int address[200];};struct student *stu=NULL;int current=0;int total=0;void insert(){if(stu==NULL)stu=(struct student *)malloc(total*sizeof(struct student));if(current>=total){printf("对不起,由于人数已满,不能继续录入新学生信息\n");return;}printf("请输入学生姓名: ");scanf("%s",stu[current].name);printf("请输入学生性别: ");scanf("%s",stu[current].sex);printf("请输入学生学号: ");scanf("%s",stu[current].sno);printf("请输入学生电话号码: ");scanf("%s",stu[current].telephone);printf("请输入学生身份证号码: ");scanf("%s",stu[current].sid);printf("请输入学生出生日期(年-月-日): ");scanf(" %d-%d-%d",&stu[current].birth.year,&stu[current].birth.month,&stu[current].birth.d ay);printf("请输入学生家庭地址: ");scanf("%s",stu[current].address);current++;return;}void query(){char name[40];char xuehao[40];int i,item,flag;printf("\n");printf("1.按学号查询\n");printf("2.按姓名查询\n");printf("3.退出本菜单\n");printf("\n");while(1){printf("\n");printf("请选择子菜单编号:");scanf("%d",&item);flag=0;switch(item){case 1:printf("请输入要查询的学生的学号:");scanf("%s",xuehao);for(i=0;i<current;i++)if(strcmp(stu[i].sno,xuehao)==0){flag=1;printf("学生信息如下\n");printf("姓名: %s\n",stu[i].name);printf("性别: %s\n",stu[i].sex);printf("学号: %s\n",stu[i].sno);printf("电话号码: %s\n",stu[i].telephone);printf("身份证号: %s\n",stu[i].sid);printf("出生日期: %d-%d-%d\n",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf("家庭地址: %s\n",stu[i].address);return;}if(flag==0)printf("\n");printf(" 警告:学号为%s的学生不存在",xuehao);break;break;case 2:printf("请输入要查询的学生的姓名:");scanf("%s",name);for(i=0;i<current;i++)if(strcmp(stu[i].name,name)==0){flag=1;printf("学生信息如下\n");printf("姓名: %s\n",stu[i].name);printf("性别: %s\n",stu[i].sex);printf("学号: %s\n",stu[i].sno);printf("电话号码: %s\n",stu[i].telephone);printf("身份证号: %s\n",stu[i].sid);printf("出生日期: %d-%d-%d\n",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf("家庭地址: %s\n",stu[i].address);return;}if(flag==0)printf("\n");printf(" 警告:姓名为%s学生不存在",name);break;case 3:return;default:printf("非法输入,请在1-3之间选择\n");}}}void update(){char name[40];int i;printf("请输入要修改的学生姓名: ");scanf("%s",name);for(i=0;i< current;i++){if(strcmp(stu[i].name,name)==0){printf("请输入修改后的学生姓名: ");scanf("%s",stu[i].name);printf("\n");printf("修改后前的学生性别: ");scanf("%s",stu[i].sex);printf("\n");printf("请输入修改后的学生性别: ");scanf("%s",stu[i].sex);printf("\n");printf("修改前的学生学号为: ");printf("%s",stu[i].sno);printf("\n");printf("请输入修改后的学生学号: ");scanf("%s",stu[i].sno);printf("\n");printf("修改前的学生电话号码为: ");printf("%s",stu[i].telephone);printf("\n");printf("请输入修改后的学生电话号码: ");scanf("%s",stu[i].telephone);printf("\n");printf("修改前的学生身份证号为: ");printf("%s",stu[i].sid);printf("\n");printf("请输入修改后的学生身份证号: ");scanf("%s",stu[i].sid);printf("\n");printf("修改前的学生出生日期,格式(年-月-日):");printf("%d-%d-%d",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf("\n");printf("请输入修改后的学生出生日期,格式(年-月-日):");scanf("%d-%d-%d",&stu[i].birth.year,&stu[i].birth.month,&stu[i].birth.day);printf("\n");printf("修改前的家庭住址为: ");printf("%s",stu[i].address);printf("\n");printf("请输入修改后的家庭地址: ");scanf("%s",stu[i].address);return;}}printf(" 该学生不存在,请重新选择\n");return;}void deiete(){char name[40];int i,k;char a;printf("请输入要删除的学生姓名: ");scanf("%s",name);printf("\n");for(i=0;i< current;i++){if(strcmp(stu[i].name,name)==0){printf("要删除的学生姓名为:%s\n",stu[i].name);printf("\n");printf("你确定要删除吗?继续请按'y'或'Y',放弃请按'n'或'N'\n");printf("\n");printf("请选择:");scanf("%s",&a);if (a=='y'||a=='Y'){for(k=i;k<current;k++)strcpy(stu[k].name,stu[k+1].name);break;}if(a=='n'||a=='N'){printf("放弃删除!");return;}printf("非法输入");return;}}if(i==current)printf("警告:姓名为%s的学生不存在\n\n",name);else{printf("该学生信息已成功删除!\n");current--;}return;}void list(){int i;printf("一共有%d个学生信息\n",current);printf("\n");printf("学生信息列表为:\n");printf("\n");for(i=0;i<current;i++){printf("第%d个学生信息如下:\n",i+1);printf(" 姓名: %s\n",stu[i].name);printf(" 性别: %s\n",stu[i].sex);printf(" 学号: %s\n",stu[i].sno);printf(" 电话号码: %s\n",stu[i].telephone);printf(" 身份证号码: %s\n",stu[i].sid);printf("出生日期:%d-%d-%d\n",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf(" 家庭地址:%s\n",stu[i].address);printf("\n");}return;}void save(){int count;FILE*fs;fs=fopen("studentdata.dat","wb");if(fs==NULL){printf("不能打开文件\n");return;}count=fwrite(stu,sizeof(struct student),current,fs);fclose(fs);if(count!=current){printf("文件保存失败\n");return;}printf("文件保存成功!\n");return;}void load(){FILE *fs;int count=0;int succ=0;fs=fopen("studentdata.dat","rb");if(fs==NULL){printf("不能打开文件!\n");return;}succ=fseek(fs,0,2);if(succ!=0){printf("文件操作失败!\n");return;}count=ftell(fs);fseek(fs,0,0);current=count/sizeof(struct student);stu=(struct student *)malloc(total*sizeof(struct student));count=fread(stu,sizeof(struct student),current,fs);fclose(fs);if(count!=current){printf("读取文件失败\n");return;}printf("读取文件成功\n");return;}void main(){int choice;printf(" \n\t\t 尊敬的用户您好,欢迎使用学生信息管理系统\n");printf("\n 1.进入系统后,先按“7”加载学生信息,再进行查询;\n");printf("\n 2.按照菜单提示输入数字代号;\n");printf("\n 3.增加学生信息后,切记保存按“6”;\n");printf("\n 4.谢谢您的使用!\n");printf("\n");printf("\n");printf("\n\n\t *****学****生****信****息****管****理****系****统*****\n");printf("\n");printf("\n");printf(" 主编:电子131姜增浩\n");printf("\n");printf("\n");printf("请您输入要录入的学生总人数:");scanf("%d",&total);while(1){printf("--------------------------------------------------------------------------------");printf(" ----------------------------");printf(" ***学生信息管理系统程序功能***\n");printf(" ----------------------------\n");printf("\n");printf(" 1: --录入学生信息-- \n");printf(" 2:--查询学生信息-- \n");printf(" 3:--修改学生信息-- \n");printf(" 4:--删除学生信息-- \n");printf(" 5:--列出学生信息-- \n");printf(" 6:--保存学生信息-- \n");printf(" 7:--加载学生信息-- \n");printf(" 8:--退出程序-- \n");printf("--------------------------------------------------------------------------------\n");printf("\n\n");printf(" 请选择:");scanf("%d",&choice);printf("\n\n");switch(choice){case 1:insert();break;case 2:query();break;case 3:update();break;case 4:deiete();break;case 5:list();break;case 6:save();break;case 7:load();break;case 8:return;default:printf("非法选择请重新选择");}}}。
链表实现学生信息菜单管理系统
链表实现学生信息菜单管理系统-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII实验名称:链表实现学生信息菜单管理系统一、实验目的:1、掌握顺序表结构的实现方式;2、掌握顺序表常用算法的实现;3、熟悉利用顺序表解决问题的一般思路;4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:1、编程完成顺序表的基本操作:建立、删除、查找及显示。
2、按要求完成学生名册管理程序的编写和调试。
三、实验结果:1、创建:2、删除:3、添加:4、退出:四、实验中遇到的问题及解决方法:问题一:地址传递出错解决方案:参考网上资料代码。
问题二:创建时,停止暂停解决方案:输入学号为零时停止输入问题三:创建时需要学号姓名成绩都为零才能停止创建解决方案:占无解决方案五、实验心得体会:链表中指针的使用要注意指针的性质,确保地址正确传递,要改变的值正确改变。
在编程过程中很容易出现地址传递出错的问题,需要有耐心慢慢排查故障,解决故障。
通过本次实验让我明白了链表的操作使用,加深了我对链表的理解,同时也通过不断地练习提高了编程能力,链表的掌握对于这门课程而言十分重要,在今后的学习中,我需要更加努力,才能更好的掌握和使用链表。
源代码:#include <stdlib.h>#include <stdio.h>#define NULL 0#define LEN sizeof(struct student)struct student{int num;char name[20];float score;struct student *next;};int n;struct student *Create(){struct student *head;struct student *p1 = NULL;struct student *p2 = NULL;n = 0;p1 = (struct student *) malloc (LEN);p2 = p1;if(p1==NULL){printf ("\nCann't create it, try it again in a moment!\n");return NULL;}else{head = NULL;printf("请输入第%d个学生学号姓名成绩:\n",n+1);scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));}while(p1->num != 0){n += 1;if(n == 1){head = p1;p2->next = NULL;}else{p2->next = p1;}p2 = p1;p1 = (struct student *) malloc (LEN);printf("请输入第%d个学生学号姓名成绩:\n",n+1);scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));}p2->next = NULL;free(p1);p1 = NULL;return head;}void Print(struct student *head){struct student *p;printf ("\nNow , These %d records are:\n", n);p = head;if(head != NULL){printf("head is %o\n", head);do{printf ("%d\t%s\t%5.1f\n", p->num, p->name, p->score);p = p->next;}while (p != NULL);}}struct student *Del (struct student *head, int num){struct student *p1;struct student *p2;if (head == NULL){printf ("\nList is null!\n");return head;}p1 = head;while (p1->num != num && p1->next != NULL){p2 = p1;p1 = p1->next;}if(p1->num==num){if (p1 == head){head = p1->next;}else{p2->next = p1->next;}free (p1);p1 = NULL;printf ("\ndelete %ld success!\n", num);n -= 1;}else{printf ("\n%ld not been found!\n", num);}return head;}struct student *Insert (struct student *head, int num, struct student *node) {struct student *p1;if (head == NULL){head = node;node->next = NULL;n += 1;return head;}p1 = head;while(p1->num != num && p1->next != NULL){p1 = p1->next;}if (p1->num==num){node->next = p1->next;p1->next = node;n += 1;}else{printf ("\n%ld not been found!\n", num);}return head;}int main(void){struct student *head;struct student *stu;int thenumber;int command,flag=1;while(flag){printf("1、创建管理系统\n2、删除学生信息\n3、添加学生信息\n4、退出\n");printf("当学号姓名成绩都为0时,停止创建\n");printf("输入指令:");scanf("%d",&command);switch(command){case 1:{head = Create();Print(head);break;}case 2:{printf("\nWhich one delete: ");scanf("%d",&thenumber);head = Del(head,thenumber);Print(head);break;}case 3:{stu = (struct student *)malloc(LEN);printf("请输入第%d个学生学号,姓名,成绩:\n",n+1);scanf("%d %s %f",&(stu->num),stu->name,&(stu->score));printf("\n插到哪个学号后面: ");scanf("%d",&thenumber);head = Insert(head,thenumber,stu);Print(head);break;}case 4:flag=0;}}}。
学生管理系统 C语言 链表实现
实验二实验项目名称:线性表的基本操作实验项目的和要求:1.掌握线性表的特点2.掌握线性表的顺序存储结构和链式存储结构的基本运算。
3.尽可能考虑算法的健壮性4.实验报告中要写出测试数据、错误分析以及收获。
上机实验内容四:运动会记分子系统或学生成绩管理子系统1.参加运动会的N个学校编号为1~N。
比赛分成M个男子项目和W个女子项目,每个项目取前3名,得分分别为5,3,2。
写一个程序产生各种成绩单和得分报表。
2.完成功能包括如下:①产生一总成绩表,包括:系名、男子团体总分、女子团体总分、团体总分存储结构要求用线性表的顺序存储。
②实验报告中要写出测试数据、错误分析以及收获。
③若选择学生成绩管理子系统,可仿照运动会记分子系统完成相关的插入、删除、查找及各种统计工作。
实验代码如下:#include<stdio.h>#include<malloc.h>#include<ctype.h>#include<conio.h>#define null 0#define length sizeof(struct student)struct student{int stuid;char stuname[20];char stusex[2];float english;float math;float database;float sum;float average;struct student *next;};struct student * Insert(int n){struct student *head,*p1,*p2;for(int i=0;i<n;i++){if(i==0){printf(" **************************************\n");printf(" ** 请输入第%d个学生的信息**\n",i+1);printf(" **************************************\n");p1=(struct student *) malloc(sizeof(struct student));printf(" 请输入学生的学号:");scanf("%d",&p1->stuid);printf(" 请输入学生的姓名:");scanf("%s",p1->stuname);printf(" 请输入学生的性别:");scanf("%s",p1->stusex);printf(" 请输入学生的英语成绩:");scanf("%f",&p1->english);printf(" 请输入学生的高数成绩:");scanf("%f",&p1->math);printf(" 请输入学生的数据结构成绩:");scanf("%f",&p1->database);p1->sum=p1->english+p1->math+p1->database;p1->average=p1->sum/3;head=p1;p1->next=null;}else{printf(" **************************************\n");printf(" ** 请输入第%d个学生的信息**\n",i+1);printf(" **************************************\n");p2=(struct student *) malloc(sizeof(struct student));printf(" 请输入学生的学号:");scanf("%d",&p2->stuid);printf(" 请输入学生的姓名:");scanf("%s",p2->stuname);printf(" 请输入学生的性别:");scanf("%s",p2->stusex);printf(" 请输入学生的英语成绩:");scanf("%f",&p2->english);printf(" 请输入学生的高数成绩:");scanf("%f",&p2->math);printf(" 请输入学生的数据结构成绩:");scanf("%f",&p2->database);p2->sum=p2->english+p2->math+p2->database;p2->average=p2->sum/3;p1->next=p2;p1=p2;p2->next=null;}}return head;}void Sinsert(struct student *head){struct student *p1,*p2;p2=head;p1=(struct student *) malloc(sizeof(struct student));printf(" 请输入学生的学号:");scanf("%d",&p1->stuid);printf(" 请输入学生的姓名:");scanf("%s",p1->stuname);printf(" 请输入学生的性别:");scanf("%s",p1->stusex);printf(" 请输入学生的英语成绩:");scanf("%f",&p1->english);printf(" 请输入学生的高数成绩:");scanf("%f",&p1->math);printf(" 请输入学生的数据结构成绩:");scanf("%f",&p1->database);p1->sum=p1->english+p1->math+p1->database;p1->average=p1->sum/3;if(head==null){head=p1;p1->next=null;}else{while(p2->next!=null){p2=p2->next;}if(p2->next!=null){p1->next=p2->next;p2->next=p1;}else{p2->next=p1;p1->next=null;}}}void println(){printf(" ************************************************\n");printf(" * 欢迎使用学生管理系统*\n");printf(" ************************************************\n");printf("********************************************************************* ***********\n");printf("**** 1.批量添加学生信息************************** 2.插入单个学生****\n");printf("**** 3.查找某个学生************************** 4.删除某个学生****\n");printf("**** 5.按成绩进行排名************************** 6.显示各科最高分****\n");printf("**** 7.各科均分及及格率************************** 8 退出管理系统****\n");printf("********************************************************************* ***********\n\n");printf("-------------------提示:先进行批量添加,再单个插入———————————————\n");printf("-------------------使用单个插入后不允许再批量添加--------------------------------\n");}void Delete(struct student *head,int num){struct student *p,*q;p=head;if(head==null){printf(" ##########友情提示,没有可删除的学生!############ \n\n");}while(p->stuid!=num&&p->next!=null){q=p;p=p->next;}if(p->stuid==num){if(p==head){head=p->next;}else{q->next=p->next;}printf(" #############被删除学生的信息#############\n\n");printf("--------------------------------------------------------------------------------");printf(" 学号姓名性别英语高数数据结构总分平均分\n\n");printf(" %d %s %s %6.1f %6.1f %6.1f %6.1f %6.1f\n\ n",p->stuid,p->stuname,p->stusex,p->english,p->math,p->database,p->sum,p->average,p->sum,p ->average);printf("--------------------------------------------------------------------------------");free(p);}else{printf(" #########友情提示!找不到该用户的资料!##########\n\n");}}void Search(struct student *head,int num){struct student *p;p=head;if(p==null){printf(" ##########友情提示!链表为空##########\n\n");}else{while(p!=null){if(p->stuid==num){printf("--------------------------------------------------------------------------------");printf(" 学号姓名性别英语高数数据结构总分平均分\n\n");printf(" %d %s %s %6.1f %6.1f %6.1f %6.1f %6.1f\n\ n",p->stuid,p->stuname,p->stusex,p->english,p->math,p->database,p->sum,p->average,p->sum,p ->average);printf("--------------------------------------------------------------------------------");}else{printf(" ##########友情提示!没有该用户的信息##########\n\n");}p=p->next;}}}void class_average(struct student *head){struct student *p1;p1=head;float i=0,e=0,m=0,d=0;if(p1==null){printf(" ##########友情提示,该系统中没有用户!!############");}float english1=0,math1=0,database1=0;while(p1!=null){i++;english1=english1+p1->english;if(p1->english>=60){e++;}math1= math1+ p1->math;if(p1->math>=60){m++;}database1=database1+ p1->database;if(p1->database>=60){d++;}p1=p1->next;}float ave1=english1/i;float ave2=math1/i;float ave3=database1/i;printf(" ************************************************\n");printf(" * 各科均分及及格率的查询*\n");printf("************************************************\n\n");printf("--------------------------------------------------------------------------------");printf(" 英语高数数据结构\n\n");printf(" 均分: %6.1f %6.1f %6.1f \n\n " , ave1, ave2 , ave3 );printf(" 及格率: %6.1f%% %6.1f%% %6.1f%%\n\n", e/i*100, m/i*100, d/i*100);printf("--------------------------------------------------------------------------------");}void Result_sort(struct student *head){int i=0;struct student *end;struct student *p;struct student *p1;struct student *p2;struct student *p3;p1 = (struct student *)malloc(length);p1->next = head;head = p1;for (end=null; end!=head; end=p){for (p=p1=head; p1->next->next!=end; p1=p1->next){if (p1->next->sum <p1->next->next->sum){p2 = p1->next->next;p1->next->next = p2->next;p2->next = p1->next;p1->next = p2;p = p1->next->next;}}}p1= head;head = head->next;free(p1);p3=head;printf(" 学号姓名性别英语高数数据结构总分平均分\n\n");printf("--------------------------------------------------------------------------------");while(p3!=null){printf(" %d %s %s %6.1f %6.1f %6.1f %6.1f %6.1f %d\n\n",p3->stuid,p3->stuname,p3->stusex,p3->english,p3->math,p3->database,p3->sum,p3->average,p 3->sum,p3->average);p3=p3->next;}printf("-------------------------------------------------------------------------------");}void show_max(struct student *head){printf(" ************************************************\n");printf(" * 各科最高分学生信息*\n");printf(" ************************************************\n");printf("--------------------------------------------------------------------------------");struct student *p1,*p2,*p3;float max1=0,max2=0,max3=0;for(p1=head;p1->next!=null;p1=p1->next){if(p1->english>p1->next->english){max1=p1->english;}else{max1=p1->next->english;}}for(p2=head;p2->next!=null;p2=p2->next){if(p2->math>p2->next->math){max2=p2->math;}else{max2=p2->next->math;}}for(p3=head;p3->next!=null;p3=p3->next){if(p3->database>p3->next->database){max3=p3->database;}else{max3=p3->next->database;}}printf(" 英语: %6.1f \n\n",max1);printf(" 高数: %6.1f \n\n",max2);printf(" 数据结构: %6.1f \n\n",max3);printf("--------------------------------------------------------------------------------");}void main(){println();struct student *head;while(1){printf(" ##########请输入您要进行的操作###########\n\n");int i;scanf("%d",&i);switch(i){case 1:int n;printf(" ########请输入您要批量的个数:###########\n\n");scanf("%2d",&n);head=Insert(n);break;case 2:Sinsert(head);break;case 3:int num2;printf(" #########请输入要查找学生的学号:##########\n\n");scanf("%10d",&num2);Search(head,num2);break;case 4:int num1;printf(" #########请输入要删除学生的学号###########\n\n");scanf("%10d",&num1);Delete(head,num1);break;case 5:Result_sort(head);break;case 6:show_max(head);break;case 7:class_average(head);break;case 8:printf("**************************************\n");printf(" ##########感谢您使用---再见###########\n");printf("**************************************\n");return;break;}}}分工:裴耀耀:1,3模块吴佳东:2,4模块武立峰:6,7模块楼玉双:5,8模块实验测试数据:实验总结:1.熟练了对链表的操作2.学会了对链表的冒泡排序3.掌握了链式存储结构的特点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3、4、
7、
#include <iostream>
using namespace std;
//实现线性表的链式存储结构的类型定义
typedef int Elemtype;
#define OK 1;
#define ERROR -1;
struct NODE //结点类型
{
Elemtype elem;
NODE *next;
};
struct LINK_LIST //链表类型
{
NODE *head;
};
//典型操作的算法实现
//初始化链表L
int InitList(LINK_LIST *L)
{
L->head = (NODE*)malloc(sizeof(NODE)); //为头结点分配存储单元if (L->head) {L->head->next=NULL; return OK;}
else return ERROR ;
}
//销毁链表L
void DestoryList(LINK_LIST *L)
{
NODE *p;
while (L->head) //依次删除链表中的所有结点
{
p=L->head; L->head=L->head->next;
free(p);
}
}
//清空链表L
void ClearList(LINK_LIST *L)
{
NODE *p;
while (L->head->next){ //p指向链表中头结点后面的第一个结点
p=L->head->next;
L->head->next=p->next; //删除p结点
free(p); //释放p结点占据的存储空间
}
}
//求链表L的长度
int ListLength(LINK_LIST L)
{
NODE *p;
int len;
len=0;
for(p=L.head;p->next!=NULL; p=p->next)
len++ ;
return(len);
}
// 判链表L空否。
int IsEmpty(LINK_LIST L)
{
if (L.head->next==NULL) return true;
else return false;
}
//()通过e返回链表L中第i个数据元素的内容
void GetElem(LINK_LIST *L,int i,Elemtype *e)
{
NODE *p;
int j;
if (i<1||i>ListLength(*L))
exit(-1); //检测i值的合理性
for (p=L->head,j=0; j!=i; p=p->next,j++);
p = L->head;
for (j=0; j<i; j++) //寻找第i-1个结点
p=p->next;
*e=p->elem; //将第i个结点的内容赋给e指针所指向的存储单元中
}
//在链表L中检索值为e的数据元素
NODE *LocateELem(LINK_LIST L,Elemtype e)
{
NODE *p;
for (p=L.head->next;p&&p->elem!=e;p=p->next); //寻找满足条件的结点return(p);
}
//返回链表L中结点e的直接前驱结点
NODE *PriorElem(LINK_LIST L,NODE* e)
{
NODE *p;
if (L.head->next==e) return NULL; //检测第一个结点
for (p=L.head;p->next&&p->next!=e;p=p->next);
if (p->next==e) return p;
else return NULL;
}
//返回链表L中结点e的直接后继结点
NODE *NextElem(LINK_LIST L,NODE* e)
{
NODE *p;
for(p=L.head->next;p&&p!=e;p=p->next);
if (p) p=p->next;
return p;
}
//在链表L中第i个数据元素之前插入数据元素e
int ListInsert(LINK_LIST *L,int i,Elemtype e)
{
NODE *p,*s;
if (i<1||i>ListLength(*L)+1) return ERROR;
p=L->head;
for (int j=0; j<i-1; j++) //寻找第i-1个结点
p=p->next;
s=(NODE*)malloc(sizeof(NODE));
if (s==NULL) return ERROR;
s->elem=e;
s->next=p->next; p->next=s; //将s结点插入
return OK;
}
//将链表L中第i个数据元素删除,并将其内容保存在e中。
int ListDelete(LINK_LIST *L,int i,Elemtype *e)
{
NODE *p, *s;
if (i<1||i>ListLength(*L)) return ERROR; //检查i值的合理性p=L->head;
for(int j=0;j<i-1;j++) //寻找第i-1个结点
p=p->next;
s=p->next; //用s指向将要删除的结点
p->next=s->next; //删除s指针所指向的结点
*e=s->elem;
free(s);
return OK;
}
void main()
{
LINK_LIST NL;
InitList(&NL);
cout<< IsEmpty(NL)<<endl;
int a,b;
a = 11;
ListInsert(&NL,1,a);
a=21;
ListInsert(&NL,1,a);
a=31;
ListInsert(&NL,1,a);
cout<< IsEmpty(NL)<<endl;
GetElem(&NL,1,&b);
cout<< b <<endl;
GetElem(&NL,2,&b);
cout<< b<<endl;
GetElem(&NL,3,&b);
cout<< b<<endl;
ListDelete(&NL,1,&a);
GetElem(&NL,1,&b);
cout<< b <<endl;
DestoryList(&NL);
getchar();
}。