查找实验报告

| 浏览次数:

 实验报告

 姓

  课程名称:

  院(系

 专业/年级:

 实验四

 —- - 查找

 一、实验目得 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、程序格式错误

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

推荐访问: 查找 实验 报告

【查找实验报告】相关推荐

工作总结最新推荐

NEW
  • 同志们:今天这个大会,是市委全面落实党要管党、从严治党要求的一项重大举措,也是对县市区委书记履行基层党建工作第一责任人情况的一次集中检阅,同时是对全市基层党建工作的一次再部署、再落实的会议。前面,**

  • ***年,我认真履行领班子、带队伍、抓党员、保稳定的基层党建工作思路,以学习贯彻习近平新时代中国特色社会主义思想和党的十九大历次全会精神为主线,以市局基层党建工作考核细则为落脚点,落实全面从严治党主体

  • 根据会议安排,现将2022年履行抓基层党建工作职责情况报告如下:一、履职工作特色和亮点1 突出政治建设,着力在思想认识上提高。牢固树立抓党建就是抓政绩的理念,以“党建工作抓引领、社区治理求突破,为民服

  • 2022年以来,在**党委的正确领导下,坚持以习近平新时代中国特色社会主义思想为指导,深入学习宣传贯彻党的二十大精神,以党建工作为统领,扎实开展夯实“三个基本”活动,以“四化四力”行动为抓手,聚力创建

  • 各位领导,同志们:根据会议安排,现就2022年度抓基层党建工作情况汇报如下:一、主要做法及成效(一)强化政治引领。一是不断强化理论武装。坚持通过党组会、中心组学习会和“三会一课”,第一时间、第一议题学

  • 2022年度抓基层党建工作述职报告按照党委工作部署,现将本人2022年度抓基层党建工作情况报告如下:一、2022年度抓基层党建工作情况(一)旗帜鲜明讲政治将旗帜鲜明讲政治放在全局发展首要位置,积极开展

  • 2022年,是我在数计系党总支书记这个新岗位上度过的第一个完整的工作年度。回首一年来在校党委的正确领导下,与数计系领导班子和全体师生共同走过的日子,艰辛历历在目,收获温润心田。作为党总支书记,我始终牢

  • 按照考核要求,现将本人一年来,作为统战部长履行职责、廉洁自律等方面情况报告如下:一、着眼增强政治素质,不断深化理论学习坚持把旗帜鲜明讲政治作为履职从政的第一位要求,带领统战系统干部坚决拥护“两个确立”

  • **年,紧紧围绕党工委、管委会的决策部署,全体人员团结协作、凝心聚力,紧扣党工委“**”基本工作思路,全力开拓进取,认真履职尽责,圆满完成各项工作任务。一、个人思想政治状况柠檬文苑www bgzjy

  • 按照县委关于开展抓基层党建述职评议会议的有关要求,经请示县委组织部同意,今天,我们在此召开2022年度基层党组织书记抓基层党建述职评议会议。1 首先,请**党委书记,**同志述职。**党委能够主动研究