




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构实验报告 专 业 信息管理与信息系统 班 级 学 号 学生姓名 指导老师 河南科技大学管理学院 2014年11月20日实验一、顺序表的应用一、 实验目的熟练掌握线性表的顺序存储结构的建立方法以及基本操作算法,并根据实际问题的要求,灵活运用。让学生能够初步了解并理解学生信息管理系统的建立以及每一步的运行,为以后的实验奠定基础。2、 实验内容本次实验要求验证以班级学生信息作为管理对象,实现顺序表各种基本运算的C语言程序。通过本次实验练习,要求学生对C语言各个知识点进行复习领会,学习如何利用C语言建立班级学生信息线性表的顺序存储结构,如何使用顺序表的基本操作算法,实现对班级学生信息的管理,包括学生信息的插入、学生信息的删除、学生信息的查询和学生信息线性表的输出。 1、学生信息管理主控程序学生信息管理系统 1、学生信息线性表的建立 2、插入学生信息 3、查询学生信息 4、删除学生信息 5、输出所有学生信息 0、退出管理系统请选择05:2、学生信息管理功能函数 (1) 函数createList(),建立学生信息顺序表; (2) 函数printList(),输出学生信息顺序表中的各项内容; (3) 函数insert(), 在学生信息顺序表中插入新的学生信息结点; (4) 函数findList(), 在学生信息顺序表中实现按学号和姓名两种方式查询学生信息; (5) 函数delNode(),在学生信息顺序表中删除指定学生的信息; 三、完成情况 在充分了解实验目的与实验内容的基础上,将下列程序在VC+ 6中运行,会得出相应的结果。并能充分认识到学生信息管理系统。#include #include #define MAXSIZE 100typedef struct char num8;/*学号*/ char name9;/*姓名*/ char gender3;/*性别*/ int score;/*成绩*/DataType;typedef struct DataType stuMAXSIZE; int length;sequenlist;int menu_select()int sn;printf(n 管理学院 信管131班 王娟n);printf(=n);printf(n 学生信息管理系统n);printf(=n);printf( 1.学生信息线性表的建立n);printf( 2.插 入 学 生 信 息n);printf( 3.查 询 学 生 信 息n);printf( 4.删 除 学 生 信 息n);printf( 5.输 出 所有学生信息n);printf( 0.退 出 管 理 系 统n);printf(=n);printf(请选择0-5:n);for(;)scanf(%d,&sn);if (sn5) printf(nt输入错误,重选0-5n);else break;return sn;void createList(sequenlist *L)int n,i;printf(有几位学生?请输入:n);fflush(stdin);scanf(%d,&n);printf(以下请输入这%d位学生的信息:n,n);for(i=0;istui.num,L-,L-stui.gender,&L-stui.score);L-length=n;void printList(sequenlist *L)int i;printf(n学号(8) 姓名(8) 性别 成绩n);printf(-n);for(i=0;ilength;i+) printf(第%d位学生:,i); printf(%s,%s,%s,%dn,L-stui.num,L-,L-stui.gender,L-stui.score); printf(-n);int insert(sequenlist *L,DataType *student,int i)int j;if(L-length=MAXSIZE) printf(overflow!); return 0;else if(iL-length) printf(error,please input the right i); return 0;else for(j=L-length-1;j=i;j-) strcpy(L-stuj+1.num,L-stuj.num); strcpy(L-stuj+1.name,L-); strcpy(L-stuj+1.gender,L-stuj.gender); L-stuj+1.score=L-stuj.score; strcpy(L-stui.num,student-num); strcpy(L-,student-name); strcpy(L-stui.gender,student-gender); L-stui.score=student-score; L-length=L-length+1; return 1;int findList(sequenlist *L)char num8;char name9;int i=0,xz;printf(=n);printf(1、按学号查询n);printf(2、按姓名查询n);printf(=n);printf( 请选择: );fflush(stdin);scanf(%d,&xz);if (xz=1) printf(请输入要查找学生的学号:); scanf(%s,num); for(i=0;ilength;i+) if(strcmp(L-stui.num,num)=0) return i; else if (xz=2) printf(请输入要查找学生的姓名:); scanf(%s,name); for(i=0;ilength;i+) if(strcmp(L-,name)=0) return i; return -1;/*如果没找到,返回-1。否则直接返回,不会执行本句*/void delNode(sequenlist *L)int i,j;printf(请先查找您要删除的学生信息:n);i=findList(L);if(i=-1) printf(没有查到要删除的学生信息); return;for(j=i;jlength;j+) L-stuj.score=L-stuj+1.score; strcpy(L-stuj.num,L-stuj+1.num); strcpy(L-,L-stuj+1.name); strcpy(L-stuj.gender,L-stuj+1.gender);L-length-;printf(该学生信息已被删除!n);void main() sequenlist *L; DataType *student; int i; L=(sequenlist *)malloc(sizeof(sequenlist); while(1) switch(menu_select() case 1: printf(*n); printf( 学生信息线性表的建立 n); printf(*n); createList(L); break; case 2: printf(*n); printf(添加学生信息n); printf(请输入要添加的学生信息:n);printf(n学号(8) 姓名(8) 性别 成绩n); printf(*n); student=(DataType *)malloc(sizeof(DataType); fflush(stdin); scanf(%s%s%s%d,student-num,student-name,student-gender,&student-score); printf(请输入要插入的位置:n); fflush(stdin); scanf(%d,&i); insert(L,student,i); break; case 3: printf(*n); printf(查询学生信息n); printf(*n); i=findList(L); if(i!=-1) printf(您要查的学生为:n学号(8) 姓名(8) 性别 成绩n); printf(-n); printf(%s,%s,%s,%dn,L-stui.num,L-,L-stui.gender,L-stui.score); printf(-n); else printf(没有您要查询的学生信息!); break; case 4: printf(*n); printf(删除学生信息n); printf(*n); delNode(L); break; case 5: printf(*n); printf(输出所有学生信息n); printf(*n); printList(L); break; case 0:printf(再见!n);getch(); return; 4、 实验结果 学生信息表的建立并输出验证插入学生信息并输出验证两种方法查询学生信息删除学生信息(此处只列出一种:按学号删除。按姓名删除的方法一样。)输出所有学生信息(既是对的输出,又是对整体的输出。)O退出管理系统 五、问题与解决(小四号字,宋体)1 实验中遇到的问题及解决过程 2 实验中产生的错误及原因分析首先写出执行语句不成功的时候系统报告的错误信息。然后分析错误原因,并给出解决办法。六、实验总结 实验之前只有完全理解实验的基本目的和内容,将实验的程序与课本中的内容联系起来,才能更好的把所学内容运用到实际中,才真正掌握课本中的知识。实验二、单链表的应用一、 实验目的熟练掌握线性表的链式存储结构的建立方法以及基本操作算法,并根据实际问题的要求,灵活运用。 二、实验内容本次实验要求以班级学生信息作为管理对象,根据实验一建立班级学生信息线性表的链式存储结构,并练习使用单链表的基本操作算法,实现对班级学生信息的管理,包括学生信息的插入、学生信息的删除、学生信息的查询和学生信息线性表的输出。 1、学生信息管理主控程序的设计 学生信息管理系统 1、学生信息线性表的建立 2、插入学生信息 3、查询学生信息 4、删除学生信息 5、输出所有学生信息 0、退出管理系统请选择05:2、学生信息管理功能函数的设计 (1) 设计函数createList(),建立学生信息单链表; (2) 设计函数printList(),输出学生信息单链表中的各项内容; (3) 设计函数insert(), 在学生信息单链表中插入新的学生信息结点; (4) 设计函数findList(), 在学生信息单链表中实现按学号和姓名两种方式查询学生信息; (5) 设计函数delNode(),在学生信息单链表中删除指定学生的信息; 三、完成情况 #include #include #include typedef struct char num8;/*学号*/ char name9;/*姓名*/ char gender3;/*性别*/ int score;/*成绩*/DataType;typedef struct LNodeDataType stu;struct LNode *next;LNode, *LinkList;int menu_select()int sn; printf( 管理学院 信管131班 王娟 n);printf(n 学生信息管理系统n);printf(=n);printf( 1.学生信息线性表的建立n);printf( 2.插 入 学 生 信 息n);printf( 3.查 询 学 生 信 息n);printf( 4.删 除 学 生 信 息n);printf( 5.输 出 所有学生信息n);printf( 0.退 出 管 理 系 统n);printf(=n);printf(请选择0-5:n);for(;)scanf(%d,&sn);if (sn5) printf(nt输入错误,重选0-5n);else break;return sn;LinkList CreateList(LinkList L)int n,i;LinkList p;printf(有几位学生?请输入:n);fflush(stdin);scanf(%d,&n);printf(以下请输入这%d位学生的信息:n,n);L=(LinkList)malloc(sizeof (LNode);L-next=NULL;for(i=n;i0;-i) printf(第%d位学生:,i); printf(n学号(8) 姓名(8) 性别 成绩n); p=(LinkList) malloc (sizeof(LNode); scanf(%s%s%s%d,p-stu.num,,p-stu.gender,&p-stu.score); p-next=L-next;L-next=p;return L;/CreateList_Lvoid printList(LinkList L)int i=0;LinkList p;printf(n学号(8) 姓名(8) 性别 成绩n);printf(-n);p=L-next;while(p!=NULL)printf(第%d位学生:,+i);printf(%s,%s,%s,%dn,p-stu.num,,p-stu.gender,p-stu.score); p=p-next; printf(-n);void insert(LinkList L,DataType *stu,int i)int j=0; LinkList p,s;p=L;while(p&jnext;+j;if(!p|ji-1) printf(ERRORn);s=(LinkList)malloc(sizeof(LNode);strcpy(s-stu.num,stu-num); strcpy(,stu-name); strcpy(s-stu.gender,stu-gender); s-stu.score=stu-score;s-next=p-next;p-next=s;int findList(LinkList L)char num8;char name9;int i=0,xz;LinkList p;p=L-next;printf(=n);printf(1、按学号查询n);printf(2、按姓名查询n);printf(=n);printf( 请选择: );fflush(stdin);scanf(%d,&xz);if (xz=1)printf(请输入要查找学生的学号:); scanf(%s,num);while(p!=NULL)if(strcmp(p-stu.num,num)=0)printf(您要查的学生为:n学号(8) 姓名(8) 性别 成绩n); printf(-n); printf(%s,%s,%s,%dn,p-stu.num,,p-stu.gender,p-stu.score); printf(-n); return i;elsep=p-next; i+;return -1;else if (xz=2) printf(请输入要查找学生的姓名:); scanf(%s,&name); while(p!=NULL) if(strcmp(,name)=0) printf(您要查的学生为:n学号(8) 姓名(8) 性别 成绩n); printf(-n); printf(%s,%s,%s,%dn,p-stu.num,,p-stu.gender,p-stu.score); printf(-n); return i; else p=p-next; i+; return -1;/*如果没找到,返回-1。否则直接返回,不会执行本句*/void delNode(LinkList L)char num8;LinkList p,q;p=L; printf(请先查找您要删除的学生学号:n);scanf(%s,&num);while(strcmp(p-next-stu.num,num)!=0)p=p-next; if(!(p-next)printf(ERRORn);elseq=p-next;p-next=q-next;free(q);printf(该学生信息已被删除!n);void main() LinkList L; DataType *stu; int i; L=(LinkList)malloc(sizeof(LNode); while(1) switch(menu_select() case 1: printf(*n); printf( 学生信息线性表的建立 n); printf(*n); L=CreateList(L); break; case 2: printf(*n); printf(添加学生信息n); printf(请输入要添加的学生信息:n); printf(n学号(8) 姓名(8) 性别 成绩n); printf(*n); stu=(DataType *)malloc(sizeof(LNode); fflush(stdin); scanf(%s%s%s%d,stu-num,stu-name,stu-gender,&stu-score); printf(请输入要插入的位置:n); fflush(stdin); scanf(%d,&i); insert(L,stu,i); break; case 3: printf(*n); printf(查询学生信息n); printf(*n); i=findList(L);if(i=-1)printf(没有查询到此学生信息n);elseprintf(查询成功!n); break; case 4: printf(*n); printf(删除学生信息n); printf(*n); delNode(L); break; case 5: printf(*n); printf(输出所有学生信息n); printf(*n); printList(L); break; case 0:printf(再见!n);getchar(); return; 四、实验结果 学生信息线性表的建立并输出验证插入学生信息并输出验证查询学生信息(两种方法都有)删除学生信息并输出验证输出所有学生信息O退出管理系统五、问题与解决(小四号字,宋体)1 实验中遇到的问题及解决过程 2 实验中产生的错误及原因分析首先写出执行语句不成功的时候系统报告的错误信息。然后分析错误原因,并给出解决办法。六、实验总结 实验体会和收获。 (小四号字,宋体)实验三、栈和队列的应用一、 实验目的熟练掌握栈和队列数据结构的特点以及基本操作算法,并根据实际问题的要求,灵活运用。二、实验内容本次实验仍以班级学生信息作为管理对象,首先,建立班级学生信息栈的数据存储结构,然后利用学生信息栈数据结构,实现学生信息单链表的逆置。实验提示1、学生信息栈数据结构的定义已知学生的信息包括如下内容:学号、姓名、性别、成绩,可定义学生信息栈为以下的数据结构。typedef struct char num8;/*学号*/ char name9;/*姓名*/ char gender3;/*性别*/ int score;/*成绩*/DataType; /学生结构体定义typedef struct ListNode DataType data; struct node *next;ListNode,*LinkList;/结点定义typedef struct DataType *base; DataType *top; int stacksize;SqStack;/顺序栈定义2、学生信息栈实现学生信息单链表的逆置功能函数的设计 (1)设计函数CreateList(),建立一个带头结点的学生信息单链表;(2)设计函数PrintList(L), 将学生信息单链表按从表头到表尾的顺序输出;(3)设计函数RevLinkList(L),将学生信息单链表逆置:首先将单链表中的结点数据信息依次入栈,然后数据依次出栈,赋值给单链表中结点的数据域,然后调用PrintList(L)输出即可! 当然,我们还需提供或使用栈的初始化,入栈和出栈操作函数!三、完成情况 #include #include #include #define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct char num8;/*学号*/ char name9;/*姓名*/ char gender3;/*性别*/ int score;/*成绩*/DataType;typedef struct LNodeDataType stu;struct LNode *next;LNode, *LinkList;typedef struct DataType *base; DataType *top; int stacksize;SqStack;/顺序栈定义int menu_select()int sn; printf( 管理学院 信管131班 王娟 n);printf(n 学生信息管理系统n);printf(=n);printf( 1.请输入学生信息单链表的信息:n);printf( 2.这是初始的学生信息单链表:n);printf( 3.这是逆置以后的学生信息单链表:n);printf( 0.退 出 管 理 系 统n);printf(=n);printf(请选择0-3:n);for(;)scanf(%d,&sn);if (sn3) printf(nt输入错误,重选0-3n);else break;return sn;LinkList CreateList(LinkList L)int n,i;LinkList p;printf(有几位学生?请输入:n);fflush(stdin);scanf(%d,&n);printf(以下请输入这%d位学生的信息:n,n);L=(LinkList)malloc(sizeof (LNode);L-next=NULL;for(i=n;i0;-i) printf(第%d位学生:,i); printf(n学号(8) 姓名(8) 性别 成绩n); p=(LinkList) malloc (sizeof(LNode); scanf(%s%s%s%d,p-stu.num,,p-stu.gender,&p-stu.score); p-next=L-next;L-next=p;return L;/CreateList_Lvoid printList(LinkList L)int i=0;LinkList p;printf(n学号(8) 姓名(8) 性别 成绩n);printf(-n);p=L-next;while(p!=NULL)printf(第%d位学生:,+i);printf(%s,%s,%s,%dn,p-stu.num,,p-stu.gender,p-stu.score); p=p-next; printf(-n);LinkList RevLinkList(LinkList L)SqStack s;LinkList p,q;p=L-next;s.base=(DataType *)malloc(STACK_INIT_SIZE * sizeof(DataType);if(!s.base)printf(存储空间分配失败:);s.top=s.base;s.stacksize=STACK_INIT_SIZE;while(p)*s.top+=p-stu;p=p-next;q=L-next;while(s.top!=s.base)q-stu=*-s.top;q=q-next;return L;void main() LinkList L; DataType stu; int i; L=(LinkList)malloc(sizeof(LNode); while(1) switch(menu_select() case 1: printf(*n); printf( 请输入学生信息单链表的信息: n); printf(*n); L=CreateList(L); break; case 2: printf(*n); printf( 这是初始的学生信息单链表:n); printf(*n); printList(L); break; case 3: printf(*n);L=RevLinkList(L); printf( 这是逆置以后的学生信息单链表:n); printf(*n); printList(L); break; case 0:printf(再见!n);getchar(); return; 四、实验结果 建立学生信息单链表初始的学生信息单链表逆置以后的学生信息单链表O退出管理系统五、问题与解决(小四号字,宋体)1 实验中遇到的问题及解决过程 2 实验中产生的错误及原因分析首先写出执行语句不成功的时候系统报告的错误信息。然后分析错误原因,并给出解决办法。六、实验总结 实验体会和收获。 (小四号字,宋体)实验四、查找和排序算法的应用一、 实验目的熟练掌握顺序查找和二分查找算法以及熟练掌握冒泡排序算法。 二、实验内容本次实验仍以班级学生信息作为管理对象,以学生信息中的学生成绩为关键字,实现学生信息的排序和查找。实验提示1、学生信息查找表记录结构的定义 已知学生的信息包括如下内容:学号、姓名、性别、成绩,可定义学生信息表的结构如下。typedef int KeyType;typedef struct KeyType score;/*成绩为排序和查找的关
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 爱的教育读书分享
- 幼儿身心健康活动指导体系
- 生命安全知识专题教育
- 电网改造场地调研与工程设计合同
- 车辆租赁行业法律法规咨询合同
- 智能新能源汽车维修服务及数据共享协议
- 车辆贷款风险控制与居间服务协议J
- 拉美跨境电商支付接口接入与风险管理协议
- 跨境电商平台股权架构调整与业务拓展合同
- 柴油销售与终端用户利益共享合同
- 建筑垃圾清运投标方案(技术标)
- FREE高考英语核心词汇1783
- 英语中音节有六种类型
- 第4章-汽油机后处理净化技术课件
- 绩效专员岗位月度KPI绩效考核表
- 统计模型与统计实验-南京财经大学中国大学mooc课后章节答案期末考试题库2023年
- 小学语文部编版五年级下册《修改语段》专项练习
- 2022年07月湖南郴电国际发展股份有限公司招聘105名新员工笔试题库含答案解析
- 三年级综合实践制作校园提示牌
- 《持轻物掷准》教案
- 五和大成一卡通管理系统用户手册 v9.8x
评论
0/150
提交评论