




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京理工大学珠海学院实验报告ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY一、实验内容定义一个包含学生信息(学号,姓名,成绩)的的顺序表和链表,使其具有如下功能:(1) 根据指定学生个数,逐个输入学生信息;(2) 逐个显示学生表中所有学生的相关信息;(3) 根据姓名进行查找,返回此学生的学号和成绩;(4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录;(7) 统计表中学生个数。二、实验要求:(1) 程序要添加适当的注释,程序的书写要采用缩进格式。(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。(4) 根据实验报告模板详细书写实验报告,在实验报告中给出链表根据姓名进行查找的算法和插入算法的流程图。(5) 上传源程序和实验报告到教师机的相应班级所在文件夹。顺序表的源程序保存为SqList.cpp,链表的源程序保存为LinkList.cpp,实验报告命名为:实验报告1.doc。源程序和实验报告压缩为一个文件(如果定义了头文件则一起压缩),按以下方式命名:15数字媒体技术X班学号姓名.rar,如15数字媒体技术X班070814101薛力.rar。二、程序实现(内容、步骤、程序)顺序表#include #include #include #includeusing namespace std;#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2 typedef int Status;typedef structchar no8;char name10;int price;Student; / Student为学生信息类型#define ListSizeFirst 10 / L的初始分配量#define ListSizeAdd 2 / L的分配增量typedef structStudent *elem;int length;int listsize;SqList;void InitList(SqList &L) / 构造空的顺序表LL.elem = (Student*)malloc(ListSizeFirst * sizeof(Student);if (!L.elem)exit(OVERFLOW);L.length = 0;L.listsize = ListSizeFirst; / 初始化存储容量int ListLength(SqList L) / L中有多少个数据元素个数return L.length;Status GetElem(SqList L, int i, Student &e) / 返回L中第i个数据元素的值if (iL.length) / 如果i不在L的范围之内就报错return ERROR;e = *(L.elem + i - 1); / 将L的第i个元素的值赋给ereturn OK;int LocateElem(SqList L, Student e, Status(*namecompare)(Student, Student) / 返回L里面第1个与e满足名字相同的元素的位序。int i = 1; / 比较元素的次序Student *p = L.elem; / 比较元素的地址while (i = L.length & !namecompare(*p+, e) / 还没找到满足关系的数据元素+i;if (i = L.length)return i; / 找到满足关系的数据元素就返回其位序elsereturn 0;Status ListInsert(SqList &L, int i, Student e) / 在L中第i个位置前面插入数据元素e,L长度加1Student *newbase, *q, *p;if (iL.length + 1)return ERROR;if (L.length = L.listsize) / 存储空间满了newbase = (Student*)realloc(L.elem, (L.listsize + ListSizeAdd) * sizeof(Student);L.elem = newbase; / 新地址L.listsize += ListSizeAdd; / 加长度q = L.elem + i - 1; / 插入位置for (p = L.elem + L.length - 1;p = q;-p) / 元素右移*(p + 1) = *p;*q = e; / 插入e+L.length; / 表长增1return OK;Status ListDelete(SqList &L, int i, Student &e) /删除L的第i个数据元素并返回Student *p, *q;if (iL.length)return ERROR;p = L.elem + i - 1; / 被删位置e = *p;q = L.elem + L.length - 1;for (+p;p = q;+p) / 被删元素之后的元素向左移动*(p - 1) = *p;L.length-;return OK;void ListTraverse(SqList L, void(*print)(Student&) / 从表L的第1个元素到最后1个元素都调用printStudent *p = L.elem;int i;for (i = 1;i = L.length;i+)print(*p+);cout n;void print(Student &c) /遍历输出学生信息printf(%st %st %dtn, c.no, , c.price);Status namecompare(Student c1, Student c2) /根据学生名字比较函数if (strcmp(, ) = 0)return TRUE;elsereturn FALSE;void main()int k, n, i, j, len;SqList L;Student e;InitList(L);while (1)cout 学生成绩管理n;cout n;cout 1.根据指定学生个数,逐个输入学生信息n;cout 2.逐个显示学生表中所有学生的相关信息n;cout 3.根据姓名进行查找,返回此学生的学号和成绩n;cout 4.根据指定的位置可返回相应的学生信息(学号,姓名,成绩)n;cout 5.给定一个学生信息,插入到表中指定的位置n;cout 6.删除指定位置的学生记录n;cout 7.统计表中学生个数n;cout n;cout k;switch (k)case 1:cout n;for (int i = 1;i = n;i+)cout 请录入第 i 个学生信息n;cout e.no;cout ;cout e.price;ListInsert(L, i, e);break;case 2:cout 学号t姓名t成绩tn;ListTraverse(L, print);break;case 3:cout ;j = LocateElem(L, e, namecompare);if (j)GetElem(L, j, e);cout 学号t姓名t成绩tn;print(e);elsecout 没有符合条件的元素n;break;case 4:cout i;j = GetElem(L, i, e);if (j)GetElem(L, i, e);cout 学号t姓名t成绩tn;print(e);elsecout 查找失败!n;break;case 5:cout i;cout e.no;cout ;cout e.price;ListInsert(L, i, e);break;case 6:cout i;j = GetElem(L, i, e);if (j)ListDelete(L, i, e);cout 删除成功,删除学生为:n;cout 学号t姓名t成绩tn;print(e);elsecout 没有该位置,无法删除!n;break;case 7:len = ListLength(L);cout 表中学生个数为 len 个;cout n;break;case 0:exit(0);default:cout 选择错误,重新开始!n;单链表#include #include #include #includeusing namespace std;#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2 typedef int Status;typedef structchar no8;char name10;int price;Student;typedef struct LNodeStudent data;struct LNode *next;LNode, *LinkList;void InitList(LinkList &L) / 初始化LL = (LinkList)malloc(sizeof(LNode); / 产生头结点if (!L) exit(OVERFLOW);L-next = NULL; int ListLength(LinkList L) / 返回数据元素的个数int i = 0; LinkList p = L-next;while (p)i+; p = p-next;return i;Status GetElem(LinkList L, int i, Student &e) / 取第i个元素赋值给e int j = 1; LinkList p = L-next; while (p&jnext; if (!p | ji) return ERROR;e = p-data; return OK;int LocateElem(LinkList L, Student e, Status(*compare)(Student, Student) / 给定比较函数,查找指定元素 int i = 0; LinkList p = L-next; while (p)i+; if (compare(p-data, e) / 比较得到数据元素return i; p = p-next;return 0; / 元素不存在返回0Status ListInsert(LinkList L, int i, Student e) / 插入元素int j = 0; LinkList s, p = L; while (p&jnext; if (!p | ji - 1) return ERROR; s = (LinkList)malloc(sizeof(LNode); / 生成新结点s-data = e; s-next = p-next; p-next = s; return OK; Status ListDelete(LinkList L, int i, Student &e) / 删除第i个元素 int j = 0;LinkList q, p = L; while (p-next&jnext; if (!p-next | ji - 1) return ERROR; q = p-next; p-next = q-next; e = q-data; free(q); return OK; void ListTraverse(LinkList L, void(*visit)(Student &) / 依次对每个数据元素调用函数visit() / LinkList p = L-next; while (p) visit(p-data); / 对结点调用函数visit()p = p-next; cout n;void print(Student &c) /输出结点对应学生信息 printf(%st %st %dtn, c.no, , c.price);Status namecompare(Student c1, Student c2) /根据学生名字比较函数if (strcmp(, ) = 0)return TRUE;elsereturn FALSE;void main()int k, n, j, i, len;LinkList L;Student e;InitList(L);while (1)cout 学生成绩管理n;cout n;cout 1.根据指定学生个数,逐个输入学生信息n;cout 2.逐个显示学生表中所有学生的相关信息n;cout 3.根据姓名进行查找,返回此学生的学号和成绩n;cout 4.根据指定的位置可返回相应的学生信息(学号,姓名,成绩)n;cout 5.给定一个学生信息,插入到表中指定的位置n;cout 6.删除指定位置的学生记录n;cout 7.统计表中学生个数n;cout n;cout k;switch (k)case 1:printf(请输入学生人数:n);cin n;for (i = 1;i e.no;printf(输入学生姓名:n);cin ;printf(输入学生成绩:n);cin e.price;ListInsert(L, i, e);cout n;break;case 2:printf(学号t姓名t成绩tn);ListTraverse(L, print);cout ;j = LocateElem(L, e, namecompare);if (j)G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论