数据结构实验报告-查找最高分与次高分
- 格式:doc
- 大小:60.00 KB
- 文档页数:10
数据结构与程序设计实验
实 验 报 告
课程名称 数据结构与程序设计实验 课程编号
实验项目名称 查找最高分与次高分
学号 年级
姓名 专业 计算机科学与技术
学生所在学院 计算机学院 指导教师 杨静
实验室名称地点 21B276
哈尔滨工程大学 实验报告六
实验课名称:数据结构与程序设计实验
实验名称:查找最高分与次高分
班级: 学号: 姓名: 时间:2016.05.05
一、问题描述
有 512 人参与玩某游戏,从 1~512 给每个人分配一个编号,每个人的游戏得
分在 0~999 之间,现要用不同方法查找出游戏参与者的最高分和次高分。要求:
a. 自行产生 512 个的随机整数作为所有游戏参与者的得分。
b. 输出所有游戏参与者(用编号表示)及其得分。
c. 用顺序查找方法查找出其中取得最高分和次高分者及其分数,并输出。
d. 锦标赛法查找出其中取得最高分和次高分者及其分数,并输出。
e. 通过无序序列建堆和堆调整得到取得最高分者和次高分者及其分数,并输出。
f. 比较不同方法的查找效率和各自的特点。
二、数据结构设计
1.使用结构体People存储序号和得分,表示个体
typedef struct{
int num;
int score;
}People;
2.设置MIN表示People数据类型的最小值,用于竞标赛查找
#define IN_MAX (int)(((unsigned)(~((int)0)))>>1)
#define IN_MIN (-IN_MAX-1)
const People MIN={513, IN_MIN};
3.使用结构体Peoples作为顺序表,存储每个个体
typedef struct{
People *base;
int length;
}Peoples;
三、算法设计
1.顺序查找
int search(Peoples *p){
People bigger = p->base[1];
People biggest = p->base[1];
int n;
for(n=1; n<=512; n++){
if(p->base[n].score > biggest.score){
bigger = biggest;
biggest = p->base[n];
}else if(p->base[n].score > bigger.score){
bigger = p->base[n];
}
if(p->base[n].num != biggest.num && p->base[n].score == biggest.score){
printf("第%d人和第%d人的分数一样大\n", p->base[n].num, biggest.num);
}