本科生实验报告
实验课程
数据结构
学院名称 专业名称
学生姓名
学生学号
指导教师
实验地点 实验成绩
二〇二〇年六月 二〇二〇年七月
填写说明
1、 适用于本科生所有的实验报告(印制实验报告册除外); 2、 专业填写为专业全称,有专业方向的用小括号标明; 3、格式要求:
① 用A4纸双面打印(封面双面打印)或在A4大小纸上用蓝黑色水笔书写。 ② 打印排版:正文用宋体小四号,1.5倍行距,页边距采取默认形式(上下2.54cm,左右2.54cm,页眉1.5cm,页脚1.75cm)。字符间距为默认值(缩放100%,间距:标准);页码用小五号字底端居中。 ③ 具体要求:
题目(二号黑体居中);
摘要(“摘要”二字用小二号黑体居中,隔行书写摘要的文字部分,小4号宋体);
关键词(隔行顶格书写“关键词”三字,提炼3-5个关键词,用分号隔开,小4号黑体);
正文部分采用三级标题;
第1章 ××(小二号黑体居中,段前0.5行)
1.1 ×××××小三号黑体×××××(段前、段后0.5行) 1.1.1小四号黑体(段前、段后0.5行)
参考文献(黑体小二号居中,段前0.5行),参考文献用五号宋体,参照《参考文献著录规则(GB/T 7714-2005)》。
实验一 线性表的应用
一、 实验目的:
1. 掌握线性表的逻辑结果和存储结构特点;
2. 掌握线性表的基本操作,如建立、查找、插入和删除等。
二、 问题描述
创建一个班级学生信息表,包含“学号、姓名、性别、成绩”等信息。具有如下功能:
(1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据学号进行查找,返回此学生的学号和成绩; (4) 给定一个学生信息,插入到表中指定的位置; (5) 删除指定位置的学生记录;
三、数据结构设计(选用的数据元素逻辑结构和存储结构实现形式说明)
(1)逻辑结构设计 :采用的线性结构,主要通过线性表实现各元素之间一对一的关系 (2)存储结构设计 :采用顺序存储结构,顺序存储结构较为方便,直接在空间开
辟一处存储空间存放数据,创建顺序表较简单,但是在插入和删除时效率明显较低。 (3)存储结构形式说明
typedef struct {
char name[50]; char num[50]; int mark;
char genger[50]; } student;
typedef struct {
ElemType* elem; int length; } studentList;
四、算法设计
(1)算法列表(说明各个函数的名称,作用,完成什么操作)
序号 1 名称 结构体 顺序表初始化 信息输入 信息输出 顺序表的查找 顺序表的插入 线性表的删除 菜单 主函数 函数表示符 typedef struct 操作说明 为学生信息创建结构体:包括学生姓名学号,性别,成绩等 创建一个空的顺序表,并分配大小为100的存储空间 输入学生信息:姓名,学号,性别,成绩等 输出线性表中的信息 输入学生学号之后,从表头开始逐个查找符合条件的值,并返回在表中的位置i+1 先将插入位置之后的所有元素向后移一个位置,再将要插入的元素放入,最后表长加1 查找到要删除的元素,表长减1 输出要显示的功能(仅输出,无输入值) 通过switch函数实现上述操作 2 3 4 5 InitList input output LocateElem_Sq 6 InsertElem 7 8 9 DeleteElem menu main (2)各函数间调用关系(画出函数之间调用关系)
1为创建结构体,无调用关系 主函数调用以上所有函数,其他函数之间没有调用关系 InitList input output main LocateElem_Sq InsertElem DeleteElem (3)关键算法描述
Status InitList(studentList* bl) //顺序表的初始化 {
//构造一个空的顺序表L
bl->elem = (ElemType*)malloc(sizeof(ElemType) * MAXSIZE);
if (!bl->elem) exit(OVERFLOW); bl->length = 0; return OK; }
void input(ElemType* e) {
printf(\学生姓名:\); scanf(\, e->name); printf(\学生学号:\); scanf(\, e->num);
printf(\性别:\); scanf(\, &e->genger); printf(\学生成绩:\); scanf(\, &e->mark); printf(\); }
void output(ElemType* e) { }
int LocateElem_Sq(studentList* bl, ElemType e) //顺序表的查找 {
//顺序表的查找 int i;
for (i = 0; i < bl->length; i++)
if (!strcmp(bl->elem[i].name, e.num)) return i + 1; return 0; }
Status InsertElem(studentList* bl, int i, ElemType e) //顺序表的插入 {
//在顺序表L中第i个位置之前插入新的元素e int k;
if (i<1 || i>bl->length + 1) return ERROR;
printf(\学生姓名:%-10s 学生学号:%-10s 性别:%-10s 学生成绩:%-10d\\n\\n\, e->name, e->num, e->genger,e->mark);
//存储分配失败
//空表长度为0