基于线性表的查找法 数据结构实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三、实验步骤
1.需求分析
本演示程序用VC++编写,完成线性表折半查找法的生成,在有序表的任意位置插入一个元素x以及确定某一元素在有序表中的位置。
2.概要设计
首先,运用折半查找法将表中间位置记录的关键字与查找关键字比较,如果中间位置记录的关键字大于查找的关键字,则进一步查找前一个子表,否则进一步查找后一个子表;直到关键字小于查找的关键字x,然后把x插入表中关键字的后面。
}
return(0);
}
//算法.2
intInsertBinSrch(RecordList *L, KeyType k)/*在有序表l中折半查找其关键字等于k的元素,若找到,则函数值为该元素在表中的位置*/
{intlow,high,mid;
low=1;
high=L->length;/*置区间初值*/
1包含头文件#include <fstream>
2在主函数中申明变量:输入ifstream fin(“input.txt”);
ofstream fout(“output.txt”);
3说明:两个文本所在的位置为当前项目目录下,input.txt需要程序员已写好的文本,里面存储的文字按程序要求保存。Output.txt会自动生成,每次都会重写该文本。
while( low <= high)
{mid=(low+high) / 2;
if(k==L->r[mid]. key)
return(mid);/*找到待查元素*/
else
if(k<L->r[mid]. key)
high=mid-1;/*未找到,则继续在前半区间进行查找*/
else
low=mid+1;/*继续在后半区间进行查找*/
int length;
}RecordList;
//算法.1
intBinSrch(RecordList *L, KeyType k)/*在有序表l中折半查找其关键字等于k的元素,若找到,则函数值为该元素在表中的位置*/
{intlow,high,mid;
low=1;
Hale Waihona Puke Baiduhigh=L->length;/*置区间初值*/
ifstream myfin("input.txt");
intnum;
myfin>>num;
for(inti=1;i<=num;i++)
{myfin>>myL.r[i].key;
cout<<myL.r[i].key<<" ";
}
myL.length=num;
ofstream fout("output.txt");
for(inti=1;i<=num;i++)
{
fout<<myL.r[i].key<<endl;
}
/*查找线性表中的元素关键字*/
cout<<"请输入要查找的元素关键字"<<endl;
KeyType y;
cin>>y;
intrel2=BinSrch(&myL,y);
for(inti=1;i<=myL.length;i++){
typedef int KeyType;
typedef int OtherType;
typedef struct
{
KeyType key;
OtherType other_data;
}RecordType;
typedef struct
{
RecordType r[LIST_SIZE+1]; /* r[0]为工作单元*/
cout<<myL.r[i].key<<" ";
}
if(rel2==0) cout <<"没有找到 元素"<<y<<endl;
else
cout<<"元素是第"<<rel2<<"个"<<endl;
/*向线性表中插入元素关键字,并保持表的有序性*/
cout<<"请输入要插入的元素关键字"<<endl;
KeyType x;
2.调试分析
5.测试结果
(1)输入关键字:20
(2)查看原来的有序表数字排列:6 12 15 18 22 25 28 35 46 58 60
关键字如下:6 12 15 18 22 25 28 35 46 58 60
注意:1存储单元从1号单元开始
2要学会通过查找的返回值来判断是否找到元素。
提高点:
1存储关键字的方式:可直接存储,可通过循环从屏幕接收输入,可从文本接收输入。
2查找的操作:可只查找其中两个程序结束,可通过屏幕接收查找元素,并能实现不间断查找,直到客户输入结束标记为止。
3编写一个函数,利用折半查找算法在一个有序表中插入一个元素x,并保持表的有序性。
3.详细设计
1)//头部
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
using namespace std
#define LIST_SIZE 20
cin>>x;
intrel=InsertBinSrch(&myL,x);
for(inti=1;i<=myL.length;i++){
cout<<myL.r[i].key<<" ";
}
cout<<"元素是第"<<rel<<"个"<<endl;
system("pause");
}
2)文本输入输出方法大体如下:
}
for(inti=L->length;i>=mid;i--)/*插入元素以后的所有元素都向后移*/
{
L->r[i+1].key=L->r[i].key;
}
L->r[mid].key=k;/*插入该元素*/
L->length++;/**/
return(mid);
}
//主函数:
voidmain()
{RecordList myL;
while( low <= high)
{mid=(low+high) / 2;
if(k==L->r[mid]. key)
return(mid);/*找到待查元素*/
else
if(k<L->r[mid]. key)
high=mid-1;/*未找到,则继续在前半区间进行查找*/
else
low=mid+1;/*继续在后半区间进行查找*/
闽江学院软件学院
数据结构实验报告
实验名称基于线性表的查找法
实验项目运用折半查找法在有序表中插入一个元素
专业班级姓名学号
指导教师成绩日期2011-5-6
一、实验目的
1.理解数据结构中线性表的查找方法。
2.掌握折半查找法的C++描述。
3.掌握有序表的插入的设计与C++实现。
二、实验内容
1.编制一个演示有序表插入、折半查找法在有序表中插入一个元素等操作的程序。
相关文档
最新文档