数据结构索引查找实现标准库

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

逻辑设计

索引顺序查找主要涉及整型变量和数组整个程序分四大模块(函数):(1)主菜单(main 函数);(2)创建主表函数(CreateDTSSTable);(3)创建索引表函数(CreateIDSStable);(4)查找函数(Search);模块图如图3.1所示:

主表及其索引表如图3.2所示:

图3.1 程序模块图

图3.2 主表及其索引表图

详细设计

(1)创建主表函数

主要运用for循环语句及if条件语句来实现,流程图如下所示:

图4.1 创建主表函数流程图

(2)创建索引表函数

索引表主要分为最大关键字和每块的起始地址,函数主要使用for循环语句及if条件语句来实现,流程图如下所示:

图4.2 创建索引表函数流程图

(4)主函数

图4.4 主函数流程图

程序编码

#include

using namespace std;

int A[100];//用来存放主表

int B[10];//用来存放索引表每块中的最大关键字

int C[10];//用来存放索引表最大关键字所对应的块的初始地址

void CreateDTSSTable(int A[],int num,int b,int s)//创建主表

{

int i,j;

for(i=1;i

{

cout<<"请您依次输入第"<

for(j=1+s*(i-1);j<=s*i;j++)

cin>>A[j];

}

if(i=b)//第b块

{

cout<<"请您依次输入第"<

for(j=s*(b-1)+1;j<=num;j++)

cin>>A[j];

}

}

void CreateIDSStable(int A[],int B[],int C[],int num,int b,int s)//创建索引表{

int i,j,k,max;

for(i=1;i

{

max=A[1+s*(i-1)];

k=1+s*(i-1);

for(j=1+s*(i-1);j<=s*i;j++)

{

if(max

max=A[j];

}

B[i]=max;

C[i]=k;

cout<<"第"<

cout<<"第"<

}

if(i=b)

{

k=1+s*(b-1);

max=A[1+s*(b-1)];

for(j=k;j<=num;j++)

{

if(max

max=A[j];

}

B[i]=max;

C[i]=k;

cout<<"第"<

cout<<"第"<

}

}

void Search(int A[],int B[],int C[],int key,int num,int b,int s)//查找

{

int i,j,k;

bool flag1=0,flag2=0,flag3=0,flag4=0;

for(i=1;i

{

k=1+s*(i-1);

for(j=1+s*(i-1);j<=s*i;j++)

{

if(key==A[j])

{

k=j;

flag1=1;

flag3=1;

flag4=1;

}

}

if(flag1)

{

cout<<"所查关键字的位置为: "<

if(key==B[i])

cout<<"本次查找共经历了: "<

else if(k%s==0)

cout<<"本次查找共经历了:"<<((k-1)/s+1+k%s)+s<<"次比较!"<

else

cout<<"本次查找共经历了: "<<((k-1)/s+1+k%s)<<" 次比较!"<

flag1=0;

}

}

if(flag4==0)

cout<<"您查找的关键字不在本索引表前"<

if(!flag3)

{

if(i=b)

{

k=1+s*(b-1);

for(j=k;j<=num;j++)

{

if(key==A[j])

{

k=j;

flag2=1;

}

}

if(flag2)

{

cout<<"所查关键字的位置为: "<

if(key==B[i])

cout<<"本次查找共经历了: "<

else if(k%s==0)

cout<<"本次查找共经历了:"<<((k-1)/s+1+k%s)+s<<"次比较!"<

else

相关文档
最新文档