数据结构实验报告——查找与排序

  • 格式:docx
  • 大小:141.50 KB
  • 文档页数:12

下载文档原格式

  / 12
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

哈尔滨工业大学(深圳)

数据结构实验报告

查找与排序

学院: 计算机科学与技术

一、问题分析

此题是一道排序问题,排序的方法有很多种,此题我用的是堆排序,这是一种不稳定排序,但时间复杂度较低,比较快。计算机首先需要把文件中的数据读入内存中,用动态数组存储数据,然后建立数据结构,然后建立堆,比较子节点和父节点大小,降序排列,之后互换头结点与尾节点,再递归重复即可。查找的话,依次查找对比即可。

二、详细设计

2.1 设计思想

将股票的代码,交易日期,及开盘价等信息分别用不同的动态数组存储起来。因为要根据交易量的降序进行排序所以应将交易量的信息另外用一个float型的数组保存起来便于比较。

排序:使用一个下标数组用来模拟交易量的堆排序,将下标数组进行降序排序。再根据下标数组里的值将股票信息保存在新的文件中。

查看:因为录入文件时是先把股票的代码相同的信息存入数组的。所以查找时比较股票的代码,找到该代码后比较交易日期。最后输出交易量。

2.2 存储结构及操作

(1) 存储结构(一般为自定义的数据类型,比如单链表,栈等。)

vector a;//股票代码

vector b;//股票交易日期

vector c;//股票开盘价_最高价_最低价_收盘价

vector d;//将交易量转换为float用于比较不过有的会被舍去vector e;//交易量的原始数据用于输出到排序的文件中

(2)涉及的操作(一般为自定义函数,可不写过程,但要注明该函数的含义。)

read_file() 将文件信息分别保存在上述存储结构中

HeapAdjust(vector& x,long s,long n) 小顶堆的调整函数HeapSort() 用堆排序进行交易量的降序排序并存储在指定文件中serach() 查找某交易日期某股票的交易量

2.3 程序整体流程

开始 A

读入文件,存入数组 B

排序 C

查找 D

结束 E

2.堆排序示意图(由于堆排序描述时需要具体数据,所以只弄到示意图)

三、用户手册

1>将股票文件先存入指定文件夹中,根据提示输入文件名字按回车即可

2>先在指定文件夹新建你要保存的文件后将文件的名字输入

3>根据提示输入股票代码及交易日期,以空格隔开。

四、总结

需要说明一下的是,这次实验我写的是c++代码。为什么用c++代码呢,主要是因为是最后一次实验了,需要有些纪念意义,更重要的是,c++代码比c代码简洁有效许多,我的电脑并不是很好,所以就选择了更快更简洁的c++代码。其实真正的原因是时间不够了,c++代码写的比较快,而且大一时写过类似的东西刚好用得上。最后一次了,希望助教大人高抬贵手,通融一二,在下不胜感激。

五、结果

程序正确运行的结果截图。

注:abc.txt即原文件

a.txt为新建文件

源代码:#include #include

#include

#include

#include

#include

#include

using namespace std;

vectora;

//股票代码

vectorb;

//股票交易日期

vectorc;

//股票开盘价_最高价_最低价_收盘价

vectord;

//将交易量转换为float用于比较不过有的会被舍去vectore;

//交易量的原始数据用于输出到排序的文件中

void HeapAdjust(vector&x,long s,long n){ long x1=x[s];

float x2=d[x[s]];

for(long j=2*s;j<=n;j*=2){

if(j

x[s]=x[j];//将子节点上调为父节点

s=j;//进入下一深度节点的判断

}

x[s]=x1;

}

bool HeapSort(){

fstream file;//文件变量

vector x;//存储下标

string name;

cout<<"输入要存的文件名"<

cin>>name;

file.open(name.c_str());

if(!file){

cout<<"不能打开指定文件"<

return false; }

else{

time_t start=clock(); //开始计时

long n=d.size();

x.push_back(1);//x[0]不能用来建堆

for(long i=0;i

x.push_back(i);

for(long i=n/2;i>0;--i){

HeapAdjust(x,i,n);//建堆

}

for(long i=n;i>1;--i){