数据结构结课作业预习报告

项目1:计算机设计大赛赛事统计

一、问题简要

记录每个学校参赛队伍、参加的项目、每个项目分数及其每个学校项目总分,对每个学校参加的每个项目得分排序,查找学校某个项目的获奖情况并输出。

二、问题要求

1.每个比赛项目至少有10支参赛队;每个学校最多有6支队伍参赛;
2.能统计各学校的总分;
3.可以按照学校编号或名称,学校的总分、各项目的总分排序输出;
4.可以按学校编号查询学校某个项目的获奖情况;可以按项目编号查询取得前三名的学校;
5.数据存入文件并能随时查询

三、问题分析

需要实现的程序功能中存在数据的记录、数据的排序、数据的查找等功能,因此需要考虑实现所需要的数据结构类型、数据的查找方法以及较适合的排序方法。

四、选用方法

考虑到需要记录学校、学校每个项目成绩、总分以及对其进行排序。选择使用线性表实现该程序功能,由于学校数目项目数目未知考虑使用链表对其功能实现。

五、大概思路

通过一个类将每个学校的各项数据封装,将每个具体学校放入链表中,以便于用户对其进行查找。

六、简介

创建一个学校类,存放学校相关信息,包括但不限于学校编号,学校名,队伍编号,队伍名,项目名,项目得分。用户首先得输入文件的保存位置后可使用,选择自身所需的需求去操作。
1.添加,从用户填入数据后保存到上述文件中以备用户后续查找所需。
2.输出学校总分排序,从文档中获取到数据后将每个学校的分数统计到数组中并排序,后可输出学校及其总分。
3.输出项目总分,与2类似。
4.查询学校参加项目获奖,从文档中提取数据后,对所有的项目分数排序后,在前三中查找是否有该学校参加的项目若有则输出相应奖项,若没有则输出未获奖。
5.查询项目前三的学校名,用户输入项目名后,则将提取的数据中找出项目名所对应的分数并排序后输出前三的学校名。
6.文件保存,通过c++中的fstream的头文件可产生与文件的相互查找,即可获取文件中的数据。

七、伪代码
函数GetTxt{},从文件中获取数据后存放二维数组中。
GetTxt(){}:
1.创建文件流对象
2.判断文件位置是否正确若正确则执行3,若不正确则退出。
3.定义一个School结构体数组存放读取出的数据。
4.进入while循环,若i!=line,则继续5,否则返回3中数组
5.读取一行,一次放入数组中,i++,继续4。
方法一:用户输入通过文件流对象名<< 内容 添加进文件。
1.将输入的学校名存放文件
2.定义一个数组存放输入的队名,项目名,成绩
3.判断输入的三项数据是否与已有的重复或输入错误,若有误则输出输入有误并返回步骤2,若无误则写入文件中。
4.询问是否继续操作。
方法二:arr1[],arr2[],,分别存放学校的总分和其名称,遍历GetTxt返回数组添加学校总分及其名称,将访问过得学校名暂时屏蔽。遍历结束后输出。
方法三:arr1[],arr2[]分别存放项目名,项目总分,同三遍历成员函数返回数组后依次添加,后按用户输入输出相关数据。
方法四:通过一个临时变量存放名次数据,对GetTxt返回数组排序后若在前三个当中找到所需的学校及其项目输出相关名次,若没有则输出未获奖。
方法五:arr1[]数组存放项目的信息,在GetTxt返回数组中查找项目若找到则添加进数组,遍历完后对其排序输出arr1数组前三个的学校名。

项目2:校园导游咨询

一、问题简要

对来访用户提供一些相关信息查询

二、问题要求

1.设计你所在学校的校园平面图,所含景点不少于10个.以图中顶点表示校内各景点,存放景点名称、代号、简介 等信息;以边表示路径,存放路径长度等相关信息。
2.为来访客人提供图中任意景点相关信息的查询。
3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

三、问题分析

对用户可能会需要的功能分析。比如用户对景点的位置查询、简介、代号等信息以及到目的地的最短路径等信息的查询。所以程序需对地图中的景点进行相关处理以及每个景点之间的路径长度输出及其每个景点之间的最短路径输出。

四、选用方法

由于是对地图中的景点及其之间的路径则考虑使用无向图实现该功能。

五、大概思路

由结构体或类对每个景点信息进行包装后作为无向图的每一个景点。

六、具体实现

1.信息查询:
用户通过输入景点名后从无向图的邻接表中找到该景点后输出该景点的相关信息。若未找到则输出无相关景点信息
2.最短路径查询
通过景点之间的权值,使用Dijkstra算法后可输出最短路径的具体道路。

七、拓扑图

无向图简化无向图:
在这里插入图片描述
八、伪代码

通过无向图构建该无向图的邻接表,两个结构体,表头结点和边结构体。
图类,成员函数:insertedge()添加边结点
find()通过用户输入的景点名输出相应的景点信息
minpath()用户输入的终点输出到达的最短路径
find():遍历头结点直到找到输出该结点中的景点信息
minpath():使用Dijkstra算法寻找最短路径并输出。

项目3:算术表达式求解

一、问题简要

简单的算术表达式计算器。

二、问题要求

实现标准整数类型的四则运算表达式的求值(包含括号,可多层嵌入)

三、问题分析

输入的算术表达式中的运算符有可能为程序无法识别的,故需对算术表达式的规范性进行判断。

四、选用方法

考虑使用栈对算术表达式进行存储。

五、大概思路

设置两个栈分别存放算式中的运算符或者运算数,通过每个运算符的优先级对运算符进行操作,若运算符的优先级低则对运算数栈中的数字进行该运算符的运算,若优先级高则加入运算符栈等待,直到算术式被遍历完。

六、伪代码

通过c++自带栈创建两个栈,
运算符栈:stack OptrStack;
运算数栈:stack OpndStack;
辅助函数:isoperator(char ch):判断输入字符是否为运算符
isspace(char ch):判断字符是否为空格等其他符号
Eval(char ch):对输入运算符进行相应操作
运算函数:while(cin.get(ch) && ch!=‘=’){
if(ch为数字):添加进OpenStack
else if(ch为运算符):
判断其与运算符栈顶运算符优先级
<:添加进运算符栈,跳出
>:调用Eval()函数用运算符栈顶操作符对运算数栈元素进行运算
=:将运算符栈顶元素推出(只有左右括号相比或等号时才为=)
‘ ’:若为空格则输入错误跳出
}
最后对操作数栈里元素用运算符栈进行运算后给出最终结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值