数据结构——查找,顺序查找,折半查找

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

实验五查找的应用

一、实验目的:

1、掌握各种查找方法及适用场合,并能在解决实际问题时灵活应用。

2、增强上机编程调试能力。

二、问题描述

1.分别利用顺序查找和折半查找方法完成查找。

有序表(3,4,5,7,24,30,42,54,63,72,87,95)

输入示例:

请输入查找元素:52

输出示例:

顺序查找:

第一次比较元素95

第二次比较元素87 ……..

查找成功,i=**/查找失败

折半查找:

第一次比较元素30

第二次比较元素63 …..

2.利用序列(12,7,17,11,16,2,13,9,21,4)建立二叉排序树,并完成指定元素的查

询。

输入输出示例同题1的要求。

三、数据结构设计(选用的数据逻辑结构和存储结构实现形式说明)

(1)逻辑结构设计

顺序查找和折半查找采用线性表的结构,二叉排序树的查找则是建立一棵二叉树,采用的非线性逻辑结构。

(2)存储结构设计

采用顺序存储的结构,开辟一块空间用于存放元素。

(3)存储结构形式说明

分别建立查找关键字,顺序表数据和二叉树数据的结构体进行存储数据

四、算法设计

(1)算法列表(说明各个函数的名称,作用,完成什么操作)

序号 名称 函数表示符 操作说明

1 顺序查找 Search_Seq 在顺序表中顺序查找关键字的数据元素

2 折半查找 Search_Bin 在顺序表中折半查找关键字的数据元素

3 初始化 Init 对顺序表进行初始化,并输入元素

4 树初始化 CreateBST 创建一棵二叉排序树

5 插入 InsertBST 将输入元素插入到二叉排序树中

6 查找 SearchBST

在根指针所指二叉排序树中递归查找关键字

数据元素 (2)各函数间调用关系(画出函数之间调用关系)

typedef struct { ElemType *R; int length;

}SSTable;

typedef struct BSTNode{

Elem data; //结点数据域 BSTNode *lchild,*rchild; //左右孩子指针

}BSTNode,*BSTree; typedef struct Elem{ int key; }Elem;

typedef struct {

int key;//关键字域

}ElemType;

(3)算法描述

int Search_Seq(SSTable ST, int key)

{

//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为

//该元素在表中的位置,否则为0

int c=1,i;

for (i=ST.length; i>=0; --i)

{

printf("第%d次比较元素%d\n",c++,ST.R[i-1].key);

if (ST.R[i-1].key==key)//从后往前找

return i;

}

return 0;

}// Search_Seq

int Search_Bin(SSTable ST,int key)

{

// 在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为

// 该元素在表中的位置,否则为0

int low=0,high=ST.length,i=1; //置查找区间初值int mid;

while(low<=high)

{

mid=(low+high) / 2;

printf("......第%d次比较元素%d\n",i++,ST.R[mid].key);

if (key==ST.R[mid].key)

return mid; //找到待查元素

else if (key

high = mid -1; //继续在前一子表进行查找

else low =mid +1; //继续在后一子表进行查找 }

return 0; //表中不存在待查元素

}

//初始化顺序表

void Init(SSTable &W)

{

int i=0,max;

W.R=(ElemType *)malloc(100*sizeof(ElemType));

printf("有序表3,4,5,7,24,30,42,54,63,72,87,95\n");

printf("输入顺序表元素个数:\n");

scanf("%d",&max);

printf("依次输入顺序表元素\n");

while(i!=max)

{

i++;

scanf("%d",&W.R[i-1].key);

}

W.length=max;

}

//*************************************插入二叉排序树T中

void InsertBST(BSTree &T,int e)

{

if(T==NULL)

{

T=new BSTNode;

T->data.key=e;

T->lchild=NULL;

T->rchild=NULL;

}

else if(T->data.key>e)

{

InsertBST(T->lchild,e);

}

else

InsertBST(T->rchild,e);

}

//**********************二叉排序树的创建

相关文档
最新文档