数据结构实验报告-查找最高分与次高分

  • 格式: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);

}