数据结构实验8查找的算法Word格式文档下载.docx

上传人:b****0 文档编号:13242667 上传时间:2022-10-08 格式:DOCX 页数:15 大小:55.82KB
下载 相关 举报
数据结构实验8查找的算法Word格式文档下载.docx_第1页
第1页 / 共15页
数据结构实验8查找的算法Word格式文档下载.docx_第2页
第2页 / 共15页
数据结构实验8查找的算法Word格式文档下载.docx_第3页
第3页 / 共15页
数据结构实验8查找的算法Word格式文档下载.docx_第4页
第4页 / 共15页
数据结构实验8查找的算法Word格式文档下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据结构实验8查找的算法Word格式文档下载.docx

《数据结构实验8查找的算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验8查找的算法Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。

数据结构实验8查找的算法Word格式文档下载.docx

输出哈希表;

(2)在上述哈希表中查找关键字为29的记录;

(3)在上述哈希表中删除关键字为77的记录,再将其插入,然后输出哈希表。

输出格式

哈希地址:

012………..12

关键字值:

……………………

三,源代码及结果截图

8.1

//实现顺序查找的算法

#include<

stdio.h>

#defineMAXL100//定义表中最多记录个数

typedefintKeyType;

typedefintInfoType;

typedefstruct

{

KeyTypekey;

//KeyType为关键字的数据类型

InfoTypedata;

//其他数据

}NodeType;

typedefNodeTypeSeqList[MAXL];

//顺序表类型

intSearch(SeqListR,intn,KeyTypek)//顺序查找算法

{

inti=0;

while(i<

n&

&

R[i].key!

=k)

{

printf("

%d"

R[i].key);

i++;

//从表头往后找

}

if(i>

=n)

return-1;

else

%d"

returni;

}

voidmain()

SeqListR;

intn=10;

KeyTypek=5;

InfoTypea[]={3,6,2,10,1,8,5,7,4,9};

inti;

for(i=0;

i<

n;

i++)//建立顺序表

R[i].key=a[i];

printf("

查找结果:

\n"

);

if((i=Search(R,n,k))!

=-1)

\n元素%d的位置是:

k,i);

else

\n元素%d不在表中\n"

k);

8.2

//实现折半查找算法

#defineMAXL100//定义表中最多记录个数

typedefcharInfoType[10];

//KeyType为关键字的数据类型

//顺序表类型

intBinSearch1(SeqListR,intn,KeyTypek)//非递归二分查找算法

intlow=0,high=n-1,mid,count=0;

while(low<

=high)

{

mid=(low+high)/2;

printf("

第%d次查找:

在[%d,%d]中查找到元素R[%d]:

%d\n"

++count,low,high,mid,R[mid].key);

if(R[mid].key==k)//查找成功返回

returnmid;

if(R[mid].key>

k)//继续在R[low..mid-1]中查找

high=mid-1;

else

low=mid+1;

//继续在R[mid+1..high]中查找

return-1;

intBinSearch2(SeqListR,KeyTypek,intlow,inthigh,intcount)//递归二分查找算法

intmid;

if(low<

elseif(R[mid].key>

BinSearch2(R,k,low,mid-1,count);

BinSearch2(R,k,mid+1,high,count);

elsereturn-1;

KeyTypek=9;

inta[]={1,2,3,4,5,6,7,8,9,10},i,n=10;

i++)//建立顺序表

用非递归方法:

if((i=BinSearch1(R,n,k))!

元素%d的位置是%d\n"

元素%d不在表中\n"

用递归方法:

if((i=BinSearch2(R,k,0,9,0))!

8.3

//实现二叉排序树的基本运算

#include<

//EOF,NULL

stdlib.h>

//atoi()

iostream.h>

//cout,cin

typedefintStatus;

typedefstructBTNode

intkey;

structBTNode*lchild;

structBTNode*rchild;

}BTNode;

//定义二叉排序树插入结点的算法

intBSTInsert(BTNode*&

T,intk)

if(T==NULL)

T=(BTNode*)malloc(sizeof(BTNode));

T->

lchild=T->

rchild=NULL;

key=k;

return1;

if(k==T->

key)

return0;

elseif(k<

T->

returnBSTInsert(T->

lchild,k);

rchild,k);

//定义二叉排序树的创建算法

BTNode*createBST(intk[],intn)

BTNode*T;

T=NULL;

for(inti=0;

=n-1;

i++){

BSTInsert(T,k[i]);

returnT;

//判断是否为二叉排序树

StatusJudge(BTNode*&

T)

return1;

elseif((T>

lchild)&

(T<

rchild))

Judge(T->

lchild);

rchild);

elsereturn0;

//定义二叉排序树的查找算法

BTNode*BSTSearch(BTNode*&

returnNULL;

{printf("

T->

key);

if(T->

key==k)

returnBSTSearch(T->

inta[50]={4,9,0,1,8,6,3,5,2,7};

BTNode*bt=createBST(a,10);

if(Judge(bt)==0)cout<

<

"

bt不是二叉排序树"

endl;

elsecout<

bt是二叉排序树"

cout<

查找关键字6的查找路径:

BTNode*t=BSTSearch(bt,6);

8.4

//实现哈希表的相关运算

#defineMaxSize100//定义最大哈希表长度

#defineNULLKEY0//定义空关键字值

#defineDELKEY-1//定义被删关键字值

//关键字类型

typedefchar*InfoType;

//其他数据类型

typedefstruct

//关键字域

//其他数据域

intcount;

//探查次数域

}HashTable[MaxSize];

//哈希表类型

voidInsertHT(HashTableha,int*n,KeyTypek,intp)//将关键字k插入到哈希表中

inti,adr;

adr=k%p;

if(ha[adr].key==NULLKEY||ha[adr].key==DELKEY)//x[j]可以直接放在哈希表中

ha[adr].key=k;

ha[adr].count=1;

else//发生冲突时采用线性探查法解决冲突

i=1;

//i记录x[j]发生冲突的次数

do

{

adr=(adr+1)%p;

i++;

}w

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 生产经营管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1