C++数据结构实验一:线性表

目录

一、实验目的

二、问题分析及数据结构设计

三、算法设计

四、功能模块程序流程图

五、实验结果

六、算法分析

七、操作说明

八、源代码


近来有空闲,把前几个学期做的实验报告上传上来。如有错误的地方欢迎大佬批评指正,有更好的方法也期待您的分享~


实验要求

编写一个实验程序实现以下功能:

有一个学生成绩文本文件xyz4.in,第一行为整数n,接下来为n行学生基本信息,包括学号、姓名和班号,接下来为整数m,然后为m行课程信息,包括课程编号和课程名,再接下来为整数k,然后为k行学生成绩,包括学号、课程编号和分数。编写一个程序按班号递增排序输出所有学生的成绩,相同班号按学号递增排序,同一个学生按课程编号递增排序,相邻的班号和学生信息不重复输出。


一、实验目的

1.熟悉线性表的逻辑结构、线性表抽象数据类型的描述方法;

2.熟悉存储结构以及算法设计方法;

3.熟悉线性表的建立、插入操作;

4.熟练 STL 中的 vector 容器及其应用;

5.复习文件读写的基本操作。

二、问题分析及数据结构设计

本次开发任务要求我们读取文件建立学生成绩线性表,并对其进行按某域值递增排序的操作。该任务涵盖功能要求有文件读取学生基本信息、课程信息和学生成绩以及建立线性表、按照班号递增排序输出所有学生的成绩,同时相同班号的学生按学号递增排序,同一个学生的成绩按课程编号递增排序。

从实验要求可知我们并不需要后续的交互, STL 标准库比我们自己实现的算法更健壮高效,在我们了解数据结构及其操作的基础上,直接使用标准库不用重复造轮子,可以提高工作效率,因此本次开发采用 STL 。 STL 组件包括容器、迭代器、算法三部分, STL 的基本观念是将数据与操作分离,数据由容器类管理,操作则由可定制的算法负责,迭代器在两者之间充当粘合剂,使任何算法都可以和任何容器交互运作。

首先我们需要选择容器,因为是线性表,自然选择顺序容器,有 vector 、 string 、 deque和 list ,因为不需要后续的插入与删除操作,故选择 vector 向量容器。

其次是数据结构设计,我们需要建立结构体方便储存从文件中读取的信息。根据实验要求,我们建立学生与课程两个结构体。课程信息结构体 Course 包含的数据项有课程编号、课程名和成绩,因为这3种都是字符串,所以使用 string 来分别定义为 id 、 name 和 score ;学生信息结构体Student包含的数据项有学号、姓名、班号和成绩,因为前三种数据都是字符串,所以使用 string 来分别定义为 id 、 name 和 classNum ,而成绩有多项数据,因此定义为课程信息结构体 Course 的 vector 容器 score 。同时为了保存学生信息和课程信息,创建包含 Student 结构体类型的 vector 向量容器 studentList 和包含 Course 结构体类型的 vector 向量容器 courseList 。

三、算法设计

1.读入文件功能

本实验要求从文本文件中读取学生成绩到线性表中,涉及的算法为 C++ 文件读取。

1.1第一步:写头文件 #include <fstream>

要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件 <iostream> 和 <fstream> 。 iostream  标准库提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。fstream 标准库定义了三个数据类型: ofstream 、 ifstream 、 fstream ,可以创建文件,向文件写入信息,从文件读取信息。

1.2第二步:采用open() 函数打开文件

本次实验只需要打开文件进行读操作,则使用 ifstream 对象。随后采用 open() 函数打开文件。open() 函数标准语法为:

void open(const char *filename, ios::openmode mode);

在这里, open() 成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。

模式标志

描述

ios::app

追加模式。所有写入都追加到文件末尾。

ios::ate

文件打开后定位到文件末尾。

ios::in

打开文件用于读取。

ios::out

打开文件用于写入。

ios::trunc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值