欢迎访问有用文档网!

当前位置: 有用文档网 > 述职报告 >

查找实验报告

| 浏览次数:

 实验报告

 姓

  课程名称:

  院(系

 专业/年级:

 实验四

 —- - 查找

 一、实验目得 1. 掌握顺序表得查找方法,尤其就是折半查找方法; 2. 掌握二叉排序树得查找算法。

 二、实验预习内容 请在上机前认真阅读教材及实验指导书 , 并在以下空白处填写相应得内容 . 1. 请写出简单顺序查找算法。

 int seq_search(elementtype A[],int n, keytype x)

 {

  i=n;A[0]、key=x;

  while(A[i]、key=x)

 i-—;

  return i; } 2. 请写出有序表二分(折半)查找算法。

 (1)非递归算法 int bin_search(elementtype A[],int n,keytype x)

 { int mid,low=0,high=n-1;

 //初始化查找区域

  while(low<=high)

 { mid=(low+high)/2;

 if(x==A[mid]、key return mid;

 else if(x<A[mid、key])high=mid-1;

 else low=mid+1;

 }

 return —1;

 //返回查找失败得标志 } (2)递归算法 int bin_search(elementtype A[],int low,int high,keytype x) { int mid;

  if( low>high)

 return -1;//查找失败

  else { mid=(low+high)/2;//求解中间元素得下标

 if( x==A[mid]、key ) return mid;//查找成功

 else if( x<A[mid]、key )

 return bin_search(A,low,mid-1,x);//将在左边区域查找得结果作为在整个区域得查找结果返回

  else return bin_search(A,mid+1,high,x);

 //将在右边区域查找得结果作为在整个区域得查找结果返回

 } }

 3. 二叉排序树查找算法: 1)请写出二叉排序树结点得结构体定义语句。

 typedef char datatype; typedef struct node {

 keytype key;

 datatype data;

 struct node * lchild, *rchild; }BSTnode;

 2)请写出二叉排序树中插入结点得算法. void insert (Bnode *&T,Bnode *S)

  //将指针 S 所指结点插入到二叉排序树 T 中 {

 if (T==NULL)

 T=S;

  //插入到空树时,插入结点成为根结点

  else if (S—〉key<T—>key)

 insert (T->lchild,S);

  //插入到 T 得左子树中

  else insert(T—>rchild,S);

 //插入到 T 得右子树中 }

  3)请写出二叉排序树构造得算法。

 void create_bst(Bnode *&T);

  //通过插入结点构造二叉排序树得算法 {

 Bnode * u;elementtype x;

 T=NULL;cin〉>x;

  //初始化根指针并读入第一个元素值

 While (x!=end_of_num)

 //x 不就是结束符时

  {

 u=new Bnode; u->data=x;

  //产生新结点并装入数据

  u->lchild=NILL;u->rchild=NULL;

 //设置左、右孩子指针为空

  insert (T,u);

 //插入结点到二叉排序树 T 中

  cin〉>x;

  //读入下一个元素得值

 } } 4)请写出二叉排序树查找得算法.

  非递归算法:

 Bnode * bst_search(Bnode * T,keytype x) {

 Bnode * P=T;

 //P 指向根

 while (p!=NULL)

 if( x==p-〉key) return p;

  //查找成功

  else if( x〈p->key=p—〉lchild);

 //到左子树中继续查找

  else

 p=p—>rchild;

 //到右子树中继续查找

  return p;

 //返回结果可能为空,也可能非空 } 递归算法:

 Bnode * bst_search(Bnode * T,keytype x) {

  if (T==NULL || t—>key=x)

 return T;

 //子树为空或已经找到时均可结束

  else

 if(x〈T->key)

 return bst_search(T->lchild, x);

 //左子树中查找得结果就就是函数得结果

  else

 return bst_search(T->rchild, x);

  //右子树中查找得结果就就是函数得结果 } 三、上机实验 1. 实验内容.

 1)建立一个顺序表,用顺序查找得方法对其实施查找; 2)建立一个有序表,用折半查找得方法对其实施查找; 3)建立一个二叉排序树,根据给定值对其实施查找; 4)对同一组数据,试用三种方法查找某一相同数据,并尝试进行性能分析。

 2. 实验源程序。

 (1)

 #include 〈stdio、h> #include <stdlib、h〉 #define max 100 int x; typedef struct

 {

 ;]xam[atad tniﻩ ;neltsil tniﻩ}seqlist; void initial_list(seqlist *L) {

 L->listlen=0; } void list_creat(seqlist *L) {

 int i;

 ;++neltsil>—Lﻩ i=L->listlen;

 ;x=]i[atad〉-Lﻩ} int last_search(seqlist *L) {

 int i;

  ;neltsil>-L=iﻩ L->data[0]=x;

 while(L->data[i]!=x)

  i——;

 return i; } int first_search(seqlist *L)

 {

 int i,n;

 n=L->listlen;

 )++i;n=<i;1=i(rofﻩ {ﻩ

 )x==]i[atad>-L(fiﻩ

  ;i nruterﻩ }ﻩ return -1; } int bin_search(seqlist *L)

 {

 int mid,low=1,high=L—>listlen;

 )hgih=<wol(elihwﻩ {ﻩ ﻩ mid=(low+high)/2;

 ﻩ if(x==L->data[mid])

 ﻩ

 ;dim nruterﻩ

 else if(x<=L->data[mid])

 high=mid—1;

  esleﻩ

  low=mid+1;

 }ﻩ ;1— nruterﻩ} int main(void)

 {

 seqlist *L;

 L=(seqlist*)malloc(sizeof(seqlist));

  int a,b,c;

 ;)L(tsil_laitiniﻩ printf("您想创建有序得查找表(以-1 结束):”);

 scanf("%d",&x);

 while(x!=-1)

 {

  ;)L(taerc_tsilﻩ

 scanf(”%d”,&x);

 }

  printf("请输入您想查找得数:");

 ;)x&,”d%”(fnacsﻩ

 printf("顺序查找---您所要找数得下标号:");

 a=first_search(L);

 if(a==—1)

  ;)"!数得查要所您有没"(ftnirpﻩ esleﻩ

 printf("%d”,a);

  printf("\n”);

 printf("倒序查找——-您所要找数得下标号:");

  b=last_search(L);

  if(b==0)

  printf("没有您所要查得数!");

 esleﻩ ﻩ printf("%d",b);

  printf("\n");

  printf("折半查找——-您所要找数得下标号:");

  c=bin_search(L);

  if(c==-1)

 ;)”!数得查要所您有没"(ftnirpﻩﻩ else

 ﻩ printf("%d",c);

  printf("\n");

 ;0 nruterﻩ} (2)

 #include<stdio、h>

 #include〈string、h> #include<stdlib、h> typedef struct BTnode {

 int data;

 struct BTnode *lchild,*rchild; } BTnode,*Bnode; void insert(Bnode &T,Bnode

 S)

 {

 )LLUN==T(fiﻩ

 ;S=Tﻩ )atad〉-T<atad>—S(fi esleﻩ ﻩ insert(T—>lchild,S);

  else insert(T->rchild,S); } void create_bat(Bnode &T) {

 Bnode u;

  ;x tniﻩ ;LLUN=Tﻩ printf("put a number:");

 ;)x&,"d%”(fnacsﻩ )1-=!x(elihwﻩ {ﻩ

 ;))edonTB(foezis(collam)*edonTB(=uﻩ

 ;x=atad>-uﻩ

 u->lchild=NULL;

  u—〉rchild=NULL;

  insert(T,u);

  ;)”:rebmun a tup"(ftnirpﻩ

  ;)x&,”d%"(fnacsﻩ } } Bnode bst_search(Bnode T,int x) {

 )x==atad〉-T||LLUN==T(fiﻩ

 return T;

  )x〉)atad〉-T((fi esleﻩ ;)x,dlihcl>—T(hcraes_tsb nruterﻩﻩ else

 ﻩ return bst_search(T->rchild,x); }

 int main()

 {

 int x;

 ;p,T edonBﻩ printf("请先建立一棵二叉排序树:”);

 ;)"n\"(ftnirpﻩ create_bat(T);

 ;)":字数得找查要您入输请"(ftnirpﻩ

 scanf(”%d",&x);

 ;)x,T(hcraes_tsb=pﻩ )LLUN=!p(fiﻩ ﻩ printf("已找到您要查找得数!");

  esleﻩ

 ;)"!数得找查要您有没!起不对"(ftnirpﻩ ;)"n\”(ftnirpﻩ ;0 nruterﻩ} 3、

 实验结果。

  四、实验总结(实验过程中出现得问题、解决方法、结果或其它)

 问题:1、输入程序时得手误

  2、粗心漏写程序

  3、程序格式错误

 解决方法:编译后根据错误提示改正 结果:程序正确运行,截图并完成实验报告

推荐访问:查找 实验 报告

热门排行Top Ranking

弦振动实验报告

弦振动得研究 一、实验目得 1、观察固定均匀弦振动共振干涉形成驻波时得波形,加深驻波得认识。 2、了

宣传委员述职报告12020 幼儿园党支部宣传委员述职报告

下面是小编为大家精心整理的宣传委员述职报告12020幼儿园党支部宣传委员述职报告文章,供大家阅读参考。宣传委员述

党建工作现场述职会上讲话 公安局长在党建工作现场会上的讲话

下面是小编为大家精心整理的党建工作现场述职会上讲话公安局长在党建工作现场会上的讲话文章,供大家阅读参考。党建工作现场

支部宣传委员述职述廉报告范例 幼儿园党支部宣传委员述职报告

下面是小编为大家精心整理的支部宣传委员述职述廉报告范例幼儿园党支部宣传委员述职报告文章,供大家阅读参考。支部宣传

政治生态评估报告5篇

可能会捆绑住经办人员的手脚,不利于业务工作的开展。致使个别中层干部主体责任压力传导出现能量损耗;个别

2021年领导述职报告合集2020 县领导述职报告

下面是小编为大家精心整理的2021年领导述职报告合集2020县领导述职报告文章,供大家阅读参考。2

工商局监察室主任述职述廉报告

工商局监察室主任述职述廉报告 第一篇:工商局监察室主任述职述廉报告 我叫haoword,中共党员,现

党支部书记个人述职报告 对村党支部书记述职报告的点评

下面是小编为大家精心整理的党支部书记个人述职报告对村党支部书记述职报告的点评文章,供大家阅读参考。党支部书记个人

财务分析课程报告4篇

财务分析课程报告4篇财务分析课程报告篇1一年来,在领导和同事们的的支持帮助和指导下,加上自身的不断努

结合乡村振兴战略人才工作述职报告 乡村振兴工作员年度述职

下面是小编为大家精心整理的结合乡村振兴战略人才工作述职报告乡村振兴工作员年度述职文章,供大家阅读参考。结合

个人安全生产履职报告[安全生产述职报告] 党委书记安全生产履职报告

下面是小编为大家精心整理的个人安全生产履职报告[安全生产述职报告]党委书记安全生产履职报告文章,供大家阅读参

企业年度工作总结报告范文13篇

企业年度工作总结报告范文13篇企业年度工作总结报告范文篇1时光飞逝,转眼已经毕业一年了,我顺利地完成