数据结构二叉排序树 哈希表Word下载.docx

上传人:b****3 文档编号:6891606 上传时间:2023-05-07 格式:DOCX 页数:24 大小:67.55KB
下载 相关 举报
数据结构二叉排序树 哈希表Word下载.docx_第1页
第1页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第2页
第2页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第3页
第3页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第4页
第4页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第5页
第5页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第6页
第6页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第7页
第7页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第8页
第8页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第9页
第9页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第10页
第10页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第11页
第11页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第12页
第12页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第13页
第13页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第14页
第14页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第15页
第15页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第16页
第16页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第17页
第17页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第18页
第18页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第19页
第19页 / 共24页
数据结构二叉排序树 哈希表Word下载.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构二叉排序树 哈希表Word下载.docx

《数据结构二叉排序树 哈希表Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构二叉排序树 哈希表Word下载.docx(24页珍藏版)》请在冰点文库上搜索。

数据结构二叉排序树 哈希表Word下载.docx

查找到该节点,将其删除,然后在插入修改后的节点。

函数说明:

1、intCreatST(BiTree&

T)//建立排序二叉树

2、voidInorder(BiTreeT)//中序遍历二叉树

3、intSearch(BiTreeT,inte)//查找

4、voidAdd(BiTree&

T,inte)//插入

5、voidDelete(BiTree&

T,inte)//删除

6、voidmodify(BiTree&

T,inte)//修改

哈希表:

哈希表即通过key值将数据存储到不同位置而建立起的表,通过key可值直接找到数据的存储位置,减少查找所消耗的时间。

所以我们需要表节点中添加一个key来存储key值。

当添加元素的key值与表中元素key值相同时,查看下一个存储位置是否有元素,若没有将该元素存储在新找到的位置否则继续找下一位置,直到找到可存储的位置。

Key值随机产生。

哈希表结构:

typedefstructele

intkey;

}Elemtype;

typedefstructhashtable

Elemtypeelem[Max_num];

intcount;

intsizeindex;

}HashTable;

1、宏定义表中最大存储个数

#defineMax_num15

2、表中元素初始化

Key值和数据值均为-1表示没有存储数据

#defineNo_key-1

#defineNo_data-1

四、程序代码:

1、二叉排序树代码:

#include<

stdio.h>

stdlib.h>

intCreatST(BiTree&

T)

BiTreep,q;

intj,n=1;

while(n>

0)

{

printf("

输入数据:

\n"

);

scanf("

%d"

&

n);

if(n==-1)break;

if(T==NULL)

{

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

T->

data=n;

left=NULL;

right=NULL;

continue;

}

p=T;

while(p)

if(n==p->

data)

printf("

该数已经存在,请重新输入!

break;

q=p;

if(n<

p->

{j=1;

p=p->

left;

}

else

{j=2;

right;

}

if(p)continue;

if(j==1)

q->

left=(Sorttree*)malloc(sizeof(Sorttree));

p=q->

elseif(j==2)

{q->

right=(Sorttree*)malloc(sizeof(Sorttree));

return1;

voidInorder(BiTreeT)

if(T)

Inorder(T->

left);

printf("

%d"

T->

data);

right);

intSearch(BiTreeT,inte)

BiTreep;

p=T;

while(p)

if(e==p->

return1;

elseif(e>

p=p->

elsep=p->

return0;

voidAdd(BiTree&

T,inte)

intj=0;

q=p;

if(e<

j=1;

p=p->

else

{j=2;

data=e;

else

p=q->

voidDelete(BiTree&

BiTreep,q,s;

boolt=true;

T->

j=1;

if(e>

j=2;

if(p->

data==e)

if((p->

left==NULL)&

&

(p->

right==NULL))

T=NULL;

p=NULL;

树已为空!

right==NULL)

T=T->

elseif(p->

left==NULL)

s=p->

q=s;

data=s->

data;

while(s->

left)

{

data=s->

left->

if(t)

t=false;

elseq=q->

s=s->

}

if(t)

p->

data=data;

if(s->

{

p->

}

elsewhile(s->

right)

s->

data=s->

right->

if(t)

t=false;

elseq=q->

s=s->

q->

else

{t=true;

q->

break;

if(j==1)

if((p->

elseif(p->

left=p->

else

while(s->

t=false;

p->

if(s->

s->

elseq=q->

{t=true;

elseif(j==2)

right=p->

q=q->

if(s->

elsewhile(s->

{

voidmodify(BiTree&

intnewelem;

if(Search(T,e))

Delete(T,e);

enterthenewelem:

scanf("

newelem);

Add(T,newelem);

elseprintf("

cannotfindthenumber:

voidmain()

BiTreeT;

inte;

CreatST(T);

Inorder(T);

printf("

pleaseenterthenuberyouwanttoadd:

//插入

e);

if(Search(T,e))

thenumberhavealreadyexisted!

elseAdd(T,e);

peaseenterthenumberyouwanttodelete:

//删除

if(!

Search(T,e))

cannotfindthenumber!

elseDelete(T,e);

pleaseenterthenumberyouwanttomodify:

modify(T,e);

运行结果:

建立二叉排序树:

添加数据:

删除数据:

修改数据:

3、哈希表代码:

time.h>

boolsuccess=false;

intvisit;

intHash(intkey)

returnkey%13;

intCreateHas(HashTable&

H)

inti;

intc;

Elemtypeelem;

pleaseenterthedata:

for(i=0;

i<

13;

i++)

elem.key=rand()%100;

elem.data);

zhekeyis:

%4d\n"

elem.key);

c=Hash(elem.key);

while(!

success)

{

visit++;

if(H.elem[c].key==No_key)

H.elem[c]=elem;

H.count++;

success=true;

else

if(c>

=13)

c=0;

elsec++;

success=false;

voidmain()

HashTableH;

visit=0;

H.count=0;

H.sizeindex=15;

srand(unsigned(time(NULL)));

H.elem[i].data=No_data;

H.elem[i].key=No_key;

CreateHas(H);

i++)

%4d"

H.elem[i].data);

查找次数:

%d\n"

visit);

平均查找次数:

visit/13);

五、课后练习:

构造哈希表,用链地址法解决冲突。

1、算法描述:

将哈希表每个节点添加一个next指针,当遇到与该节点有key值相同的元素是,将该元素的地址赋给next。

2、程序代码:

structele*next;

Elemtype*elem,*p;

intc,i;

elem=(Elemtype*)malloc(sizeof(Elemtype));

elem->

elem->

key=rand()%100;

next=NULL;

thekeyis%d:

elem->

key);

c=Hash(elem->

if(!

H.elem[c].next)

H.elem[c].next=elem;

H.count++;

else{

p=H.elem[c].next;

while(p->

next)

p=p->

next;

next=elem;

Elemtype*p;

H.elem[i].data=No_data;

H.elem[i].key=No_key;

H.elem[i].next=NULL;

%dthis:

"

i);

p=H.elem[i].next;

while(p)

p->

H.count);

H.count/13);

4、运行结果:

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

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2