程序设计类课程实验报告.docx

上传人:b****2 文档编号:2312215 上传时间:2022-10-28 格式:DOCX 页数:12 大小:32.29KB
下载 相关 举报
程序设计类课程实验报告.docx_第1页
第1页 / 共12页
程序设计类课程实验报告.docx_第2页
第2页 / 共12页
程序设计类课程实验报告.docx_第3页
第3页 / 共12页
程序设计类课程实验报告.docx_第4页
第4页 / 共12页
程序设计类课程实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

程序设计类课程实验报告.docx

《程序设计类课程实验报告.docx》由会员分享,可在线阅读,更多相关《程序设计类课程实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

程序设计类课程实验报告.docx

程序设计类课程实验报告

国脉信息学院

(程序设计类课程)

实验报告

课程名称:

算法与数据结构

姓名:

张三

系:

计算机科学与技术

专业:

年级:

学号:

指导教师:

李小林

职称:

副教授

2012年11月日

实验项目列表

序号

实验项目名称

成绩

指导教师

1

第七章检索及基本算法

2

3

4

5

6

7

8

9

10

11

12

福建农林大学计算机与信息学院实验报告

系:

计算机科学与技术专业:

年级:

姓名:

张三学号:

实验室号____计算机号93

实验时间:

2012.6.1指导教师签字:

成绩:

实验七检索

一、实验目的和要求

1)掌握检索的不同方法,并能用高级语言实现检索算法。

2)熟练掌握顺序表和有序表的检索方法,以及静态检索树的构造方法和检索算法,理解静态检索树的折半检索方法。

3)熟练掌握二叉排序树的构造和检索方法。

4)熟悉各种存储结构的特征以及如何应用树结构解决具体问题。

二、实验内容和原理

实验内容:

1)编程实现在二叉检索树中删除一个结点的算法。

2)编程实现Fibonacci检索算法。

实验原理:

1)构造排序树,每输入一个数就进行排序,选择插入的结点,删除结点,没删除一个节点就返回到构造排序树的方法。

2)Fibonacci数的定义为f0=0,f1=1,fi=f(i-1)+f(i-2)(i≥2)。

由此得Fibonacci数列为0,1,1,2,3,5,8,13,21,34,55,89,144,……

设数组F中元素按关键字值从小到大顺序排列,并假定元素个数n比某个Fibonacci树fi小1,即n=fi-1。

第一次用待查关键字k与F[f(i-1)],Key比较,其算法描述如下:

①若k=F[f(i-1)],Key,则检索成功,F[f(i-1)]为k所在记录。

②若k

③若k>F[f(i-1)],Key,则下一次的检索范围为下标f(i+1)+1到fi-1,序列长度为(fi-1)-(f(i-1)+1)+1=fi-f(i-1)-1=f(i-2)-1

设F是顺序存储的线性表且满足F[1],key≤F[2],key≤…≤F[n]。

key,k是已知的关键字值,在F中检索关键字值为k的记录。

若找到返回其下标值,否则返回0.

三、实验环境

WindowsXP系统

visualc++6.0

四、算法描述及实验步骤

实验习题一:

#include"stdio.h"

#include"malloc.h"

structBTnode

{

intdata;

structBTnode*lchild,*rchild;

}*root;

typedefstructBTnodeNode,*Nodep;

voidcreatetree(intdata)

{

Node*node,*p,*q;

node=(Nodep)malloc(sizeof(Node));

node->data=data;

node->lchild=0;

node->rchild=0;

if(root==0)

{

root=node;

return;

}

else

{

p=root;

while(p!

=0)

{

if(datadata)

{

q=p;

p=p->lchild;

if(p==0)

q->lchild=node;

}

else

if(data>p->data)

{

q=p;

p=p->rchild;

if(p==0)

q->rchild=node;

}

else

break;

}

}

}

voidshowtree(structBTnode*proot,structBTnode*m,intspace)

{

inti;

charb;

if(proot!

=0)

{

for(i=1;i<=space-3;i++)

printf("");

if(space-3>=0)

printf("---->");

if(proot==root)

printf("%d\n",proot->data);

else

{

if(m->data>proot->data)

b='L';

else

b='R';

printf("%d(%c)",proot->data,b);

printf("\n");

}

m=proot;

showtree(proot->lchild,m,space+6);

showtree(proot->rchild,m,space+6);

}

}

Nodepdeletep(Node*p)

{

Node*q,*t;

t=p;

if(p->lchild!

=0)

{

p=p->lchild;

q=p;

while(p->rchild!

=0)

{

q=p;

p=p->rchild;

}

if(p==q)

{

p->rchild=t->rchild;

free(t);

return(p);

}

if(p->lchild!

=0)

q->rchild=p->lchild;

else

q->rchild=0;

p->lchild=t->lchild;

p->rchild=t->rchild;

free(t);

return(p);

}

else

if(p->rchild!

=0)

{

p=p->rchild;

q=p;

while(p->lchild!

=0)

{

q=p;

p=p->lchild;

}

if(p==q)

{

p->lchild=t->lchild;

free(t);

return(p);

}

if(p->rchild!

=0)

q->lchild=p->rchild;

else

q->lchild=0;

p->rchild=t->rchild;

p->lchild=t->lchild;

free(t);

return(p);

}

else

{

free(p);

return(0);

}

}

NodepdeleteBTnode(intx)

{

Node*p=root,*q;

while(p!

=0)

{

q=p;

if(p->data>x)

if(p->lchild)

p=p->lchild;

else

break;

else

if(p->data

if(p->rchild)

p=p->rchild;

else

break;

if(p->data==x)

break;

}

if((p==root)&&(p->data==x))

root=deletep(p);

else

if((p==q->lchild)&&(p->data==x))

q->lchild=deletep(p);

else

if((p==q->rchild)&&(p->data==x))

q->rchild=deletep(p);

else

if(p->data!

=x)

{printf("cannotfoundthedatayouwanttodelete,pleasecheckit!

\n");

return0;

}

returnroot;

}

intmain()

{charch;

intdata;

printf("Enter'c'createtree,Enter'd'deleteanode:

");

scanf("%c",&ch);

getchar();

root=0;

while(ch=='c'||ch=='d')

{if(ch=='c')

{printf("pleaseinputthekey:

");

scanf("%d",&data);

getchar();

createtree(data);

showtree(root,0,0);

}

else

{printf("pleaseinputthekeyofthenodeyouwantdel:

");

scanf("%d",&data);

getchar();

if(deleteBTnode(data))

showtree(root,0,0);

}

printf("Enter'c'createtree,Enter'd'deleteanode:

");

scanf("%c",&ch);

}

return0;

}

实验习题二:

#include"stdio.h"

typedefintkeytype;

typedefintdatatype;

typedefstructnode

{

intkey;

}rectype;

intfibonacci(intn)

{

if(n==0)return0;

else

if(n==1)return1;

else

returnfibonacci(n-1)+fibonacci(n-2);}

voidprintData(rectypeR[],intn)

{

inti;

for(i=1;i<=n;i++)

{

printf("%5d",R[i].key);

if(i%8==0)printf("\n");}

printf("\n");

}

intfibsearch(rectypeR[],keytypeK,intn)

{

intm,i,p,q,t;

for(m=0;fibonacci(m)<=(n+1);m++){}

m--;

i=fibonacci(m-1);

p=fibonacci(m-2);

q=fibonacci(m-3);

while(i>=0&&i<=n)

{

if(K==R[i].key)

{

returni;}

elseif(K

{

i=i-q;

t=p;

p=q;

q=t-q;}

elseif(K>R[i].key)

{

i=i+q;

p=p-q;

q=q-p;

}

}

return0;

}

voidmain()

{

intm,i,k,n;

rectypeR[20];

printf("Enterknum:

");

scanf("%d",&k);

printf("enterR[20]:

");

for(i=1;i<=20;i++)

{

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

}

printData(R,20);

m=fibsearch(R,k,20);

if(m==0)

{

printf("Notfound!

\n");

}

else

printf("TheKeyhasbeenfoundatR[

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

当前位置:首页 > 解决方案 > 学习计划

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

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