实验五查找算法的设计Word文档格式.docx

上传人:b****7 文档编号:22742891 上传时间:2023-02-05 格式:DOCX 页数:18 大小:92.72KB
下载 相关 举报
实验五查找算法的设计Word文档格式.docx_第1页
第1页 / 共18页
实验五查找算法的设计Word文档格式.docx_第2页
第2页 / 共18页
实验五查找算法的设计Word文档格式.docx_第3页
第3页 / 共18页
实验五查找算法的设计Word文档格式.docx_第4页
第4页 / 共18页
实验五查找算法的设计Word文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

实验五查找算法的设计Word文档格式.docx

《实验五查找算法的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验五查找算法的设计Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

实验五查找算法的设计Word文档格式.docx

建立c1.h放程序名;

#include<

string.h>

ctype.h>

malloc.h>

limits.h>

stdio.h>

stdlib.h>

io.h>

math.h>

process.h>

iostream.h>

//状态代码

#defineTURE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

typedefintStatus;

typedefintBoolean;

建立文件c9-1.h放静态查找表的顺序存储结构

//c9-1.h

typedefstruct

{

ElemType*elem;

intlength;

}SSTable;

建立文件c9.h放对两个数值型关键字的比较约定为如下宏定义

//c9.h

#defineEQ(a,b)((a)==(b))

#defineLT(a,b)((a)<

(b))

#defineLQ(a,b)((a)<

=(b))

建立文件bo9-1.cpp放静态查找表的基本操作

StatusCreat_Seq(SSTable&

ST,intn)

{inti;

ST.elem=(ElemType*)calloc(n+1,sizeof(ElemType));

if(!

ST.elem)

returnERROR;

for(i=1;

i<

=n;

i++)

*(ST.elem+i)=r[i-1];

ST.length=n;

returnOK;

}

voidAscend(SSTable&

ST)

{inti,j,k;

ST.length;

{k=i;

ST.elem[0]=ST.elem[i];

for(j=i+1;

j<

=ST.length;

j++)

ifLT(ST.elem[j].key,ST.elem[0].key)

{k=j;

ST.elem[0]=ST.elem[j];

if(k!

=i)

ST.elem[k]=ST.elem[i];

ST.elem[i]=ST.elem[0];

StatusCreat_Ord(SSTable&

{Statusf;

f=Creat_Seq(ST,n);

if(f)

Ascend(ST);

returnf;

StatusDestroy(SSTable&

free(ST.elem);

ST.elem=NULL;

ST.length=0;

returnOK;

intSearch_Seq(SSTableST,KeyTypekey)

ST.elem[0].key=key;

for(i=ST.leng;

!

EQ(ST.elem[i].key,key);

--i)

returni;

intSearch_Bin(SSTableST,KeyTypekey)

{intlow,high,mid;

low=1;

high=ST.length;

while(low<

=high)

{mid=(low+high)/2;

ifEQ(key,ST.elem[mid].key)

returnmid;

elseifLT(key,ST.elem[mid].key)

high=mid-1;

else

low=mid+1;

}

return0;

StatusTraverse(SSTableST,void(*Visit)(ElemType))

Elemtype*p;

inti;

p=++ST.elem;

Visit(*p++);

建立程序algo9-1.cpp检验bo9-1.cpp的程序

//alog9-1.cpp检验bo9-1.cpp(顺序表部分)的程序

#include"

c1.h"

#defineN5

typedefintKeyType;

structElemType

longnumber;

charname[9];

intpolitics;

intChinese;

intEnglish;

intmath;

intphysics;

intchemistry;

intbiology;

KeyTypekey;

}r[N]={{179324,"

何芳芳"

85,89,98,100,93,80,47},

{179325,"

陈红"

85,86,88,100,92,90,45},

{179326,"

陆华"

78,75,90,80,95,88,37},

{179327,"

张平"

82,80,78,98,84,96,40},

{179328,"

赵小怡"

76,85,94,57,77,69,44}};

#definetotalkey

c9.h"

c9-1.h"

bo9-1.cpp"

voidprint(ElemTypec)

printf("

%-8ld%-8s%4d%5d%5d%5d%5d%5d%5d%5d"

\n,c.number,c.name,c.politics,c.Chinese,c.English,c.math,c.chemistry,c.biology,c.total);

voidmain()

SSTablest;

inti,s;

for(i=0;

N;

r[i].total=r[i].politics+r[i].Chinese+r[i].English+r[i].math+r[i].physics+r[i].chemistry+r[i].biology;

Creat_Seq(st,N);

printf("

准考证号姓名政治语文外语数学物理化学生物总分\n"

);

Traverse(st,print);

请输入待查找人的总分"

scanf("

%d"

&

s);

i=Search_Seq(st,s);

if(i)

print(*(st.elem+i));

else

print("

没找到\n"

Destroy(st);

2、有序表查找,同一个文件夹中建立如下五个文件c1.h;

algo9-2.cpp;

对于algo9-2.cpp进行编译、构建和运行;

建立文件algo9-2.cpp并利用实验一的文件编译

#defineN11

KeyTypekey;

intothers;

}r[N]={{5,1},{13,2},{19,3},{21,4},{37,5},{56,6},{64,7},{75,8},{80,9},{88,10},{92,11}};

(%d%d)"

c.key,c.others);

SSTablest;

KeyTypes;

Creat_Ord(st,N);

Traverse(st,print);

\n"

请输入待查找值的关键字"

);

scanf("

i=Search_Bin(st,s);

if(i)

(%d%d)%d是第%d个记录的关键字\n"

st.elem[i].key,st.elem[i].others,s,i);

else

没有找到\n"

Destroy(st);

3、树在同一个文件夹中建立如下五个文件c1.h;

c6-2.h;

bo9-2.cpp;

algo9-4.cpp;

建立c6-2.h放二叉树的二叉链表存储表示

typedefstructBiTNode

TElemTypedata;

BiTNode*lchild,*rchild;

}BiTNode,*BiTree;

建立文件bo9-2.cpp存储动态查找表的基本操作

typedefElemTypeTElemType

c6-2.h"

StatusInitDSTable(BiTree&

DT)

DT=NULL;

voidDestroyDSTable(BiTree&

if(DT)

{

if(DT->

lchild)

DestroyDSTable(DT->

lchild);

rchild)

rchild);

free(DT);

BiTreeSearchBST(BiTreeT,KeyTypekey)

if(!

T)||EQ(key,T->

data.key)

returnT;

elseifLT(key,T->

returnSearchBST(T->

lchild,key);

rchild,key);

voidSearchBST(BiTree&

T,KeyTypekey,BiTreef,BiTree&

p,Status&

flag)

T)

p=f;

flag=FALSE;

elseifEQ(key,T->

p=T;

flag=TRUE;

SearchBST(T->

lchild,key,T,p,flag);

rchild,key,T,p,flag);

StatusInsertBST(BiTree&

T,ElemTypee)

BiTreep,s;

Statusflag;

SearchBST(T,e.key,NULL,p,flag);

s=(BiTree)malloc(sizeof(BiTNode));

s->

data=e;

lchild=s->

rchild=NULL;

p)

T=s;

elseifLT(e.key,p->

p->

lchild=s;

rchild=s;

returnTRUE;

returnFALSE;

voidDelete(BiTree&

BiTreeq,s;

p->

q=p;

p=p->

lchild;

free(q);

elseif(!

rchild;

s=p->

while(s->

q=s;

s=s->

data=s->

data;

if(q!

=p)

q->

rchild=s->

free(s);

StatusDeleteBST(BiTree&

T,KeyTypekey)

{//若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素结点,

//并返回TRUE;

否则返回FALSE。

算法9.7

T)//不存在关键字等于key的数据元素

returnFALSE;

ifEQ(key,T->

data.key)//找到关键字等于key的数据元素

Delete(T);

elseifLT(key,T->

DeleteBST(T->

else

returnTRUE;

voidTraverseDSTable(BiTreeDT,void(*Visit)(ElemType))

{//初始条件:

动态查找表DT存在,Visit是对结点操作的应用函数

//操作结果:

按关键字的顺序对DT的每一个结点调用函数Visit()一且至多一次

TraverseDSTable(DT->

lchild,Visit);

Visit(DT->

data);

rchild,Visit);

建立algo9-4.cpp检验bo9-2.cpp的程序

//alog9-4.cpp的程序

#defineN10

intothers;

};

bo9-2.cpp"

(%d,%d)"

BiTreedt,p;

inti;

KeyTypej;

ElemTyper[N]={{45,1},{12,2},{53,3},{3,4},{37,5},{24,6},{100,7},{61,8},{90,9},{78,10}};

InitDSTable(dt);

InsertBSTable(dt,r[i]);

TraverseDSTable(dt,print);

请输入待查找的值:

scanf("

j);

p=SearchBST(dt,j);

if(p)

printf("

表中存在此值:

"

DeleteBST(dt,j);

删除此值后:

TraverseDSTable(dt,print);

表中不存在此值\n"

DestroyDSTable(dt);

4、实验结果:

1、顺序表查找

2、有序表查找

3、二叉查找树

5、实验心得

通过本次试验,让我对课堂所学的知识进行了巩固和提高,对顺序表、有序表和二叉树等知识进行了进一步的学习,并学会了设计查找算法。

尽管这个程序很长,但进过我们小组同学的认真思考、讨论,以及分工合作,终于完成了实验,也让我们意识到,平时的学习不光要学会书本上的知识,还应以实践为主,只有付诸实践才能体现出程序设计的重要性。

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

当前位置:首页 > 高等教育 > 哲学

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

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