实验报告1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京理工大学珠海学院实验报告
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
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2 typedef int Status;
typedef struct
{
char no[8];
char name[10];
int price;
}Student;
// Student为学生信息类型
#define ListSizeFirst 10 // L的初始分配量
#define ListSizeAdd 2 // L的分配增量
typedef struct
{
Student *elem;
int length;
int listsize;
}SqList;
void InitList(SqList &L) // 构造空的顺序表L
{
L.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 (i<1 || i>L.length) // 如果i不在L的范围之内就报错
return ERROR;
e = *(L.elem + i - 1); // 将L的第i个元素的值赋给e
return 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; // 找到满足关系的数据元素就返回其位序
else
return 0;
}
Status ListInsert(SqList &L, int i, Student e) // 在L中第i个位置前面插入数据元素e,L长度加1
{
Student *newbase, *q, *p;
if (i<1 || i>L.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;
// 表长增1
return OK;
}