数据结构查找技术验证实验报告.docxVIP

  • 11
  • 0
  • 约2.69千字
  • 约 9页
  • 2020-03-26 发布于江西
  • 举报
班级:计算机 11-2 学号:40 姓名:朱报龙 成绩:_________ 实验十 一、折半查找验证 1. 实验目的  查找技术验证实验 掌握折半查找算法的基本思想; 掌握折半查找算法的实现方法; 掌握折半查找算法的时间性能。 2. 实验内容 对给定的有序数组(假设长度为 n),查找数组中与给定值 k 相等的元素. 一、 设计与编码 #include iostream using namespace std; #define N 15 //定义常量 N 为数组长度 void find(int arr[],int key,int i) //折半查找函数 { int low=0,high=N-1,mid,j=0; //j 计数查找次数 while(low=high) { mid=(low+high)/2; //取中间位 ++j; printf(\n 第%2d 次查找 low=%2d high=%2d mid=%2d ,j,low,high,mid); //显示每次查找低中高位,查找次数 if(arr[mid]==key) //查到数据,跳出循环 break; if(arr[mid]key) //查找的 KEY 大于中位值,查后半部 low=mid+1; else high=mid-1; //查找的 KEY 小于中位值,查前半部 } if(low=high) //查到数据 printf(\n\n 经过总共%2d 次查找,找到该数字,该数字位于数组第%d 位,\n\n,j,mid+1);//显示查到的数据的值,下标值,总查找次数 else printf(\n\n 没有找到!); //显示没有找到 } void main() { int arr[N],key,i; printf(\n 折半查找验证程序,设定被查数据有位,设定为:\n); for(i=0;iN;i++) //输入 15 个排好序的数据 { arr[i]=i+1; printf(%d ,arr[i]); } printf(\n 请输入要查询的数字(-,输入小于等于零的数字退出验证程 序):); scanf(%d,key); //输入 KEY while(key0) { find(arr,key,N); //调用折半查找函数 printf(\n 请输入要查询的数字(-,输入小于等于零的数字退出验证程 序):); scanf(%d,key); //输入 KEY } } a) 程序运行的结果如何? 二、二叉排序树的建立 1. 实验目的 掌握二叉排序树定义和特性; 掌握二叉排序树的建立方法; 实现基于二叉排序树的查找技术; 掌握二叉排序树的查找性能。 2. 实验内容 ⑴ 对给定的一组无序序列,建立一棵二叉排序树; ⑵ 对建立的二叉排序树实现查找操作。 二、 设计与编码 #includeiostream using namespace std; class BT { public : BT(void)//构造函数 { void InitBiTree(BiTree *t); cout初始化结束!\n; } //存储结构——二叉链表 typedef struct Lnode { int key; struct Lnode *lchild,*rchild; }BiTnode,*BiTree; //创建、初始化 void InitBiTree(BiTree *t) { *t=NULL;//置空 } //输出中序遍历二叉树 void InorderBiTree(BiTree p) { if(p)//p 为空,则空操作,否则继续执行 { InorderBiTree(p-lchild); coutp-key ; InorderBiTree(p-rchild); } } //查找数据 BiTree SearchBST(BiTree t, int k) { BiTree p; p=t; while((p!=NULL)(p-key!=k)) if(kp-key) p=p-lchild; else p=p-rchild; return(p); } //插入数据 void InsertBST(BiTree *t,int k) { BiTnode *f,*p=*t; while(p) { if(p-key==k) return; f=p; p=(kp-key)?p-lchild:p-rchild; } p=(BiTree)malloc(sizeof(BiTnode)); p-key=k; p-lchild=p-rchild=NULL; if(*t==NULL) *t=p; else if (kf-key) f-lchild=p; else f-rchild=p; } //在二叉排序树*t 中删除关

文档评论(0)

1亿VIP精品文档

相关文档