实验五 查找的应用
1、 实验目的:1、 掌握各种查找(顺序、二分法)方法及适用场合,并能在解决实际问题时灵活应用。2、 增强上机编程调试能力。2、 问题描述1. 分别利用顺序查找和折半查找方法完成查找。有序表(3,4,5,7,24,30,42,54,63,72,87,95)输入示例:请输入查找元素:52输出示例: 顺序查找: 第一次比较元素95 第二次比较元素87 ……… 查找成功,i=**/查找失败 折半查找: 第一次比较元素30 第二次比较元素63 ……2. 利用序列(12,7,17,11,16,2,13,9,21,4)建立二叉排序树,并完成指定元素的查询。输入输出示例同上。三、存储结构表示查找表的存储表示typedef struct{int key;//关键字域}ElemType; typedef struct{ElemType *R;int length;}SSTable;树表的存储表示typedef struct ElemType{char key;}ElemType; typedef struct BSTNode{ElemType data;//结点数据域BSTNode *lchild,*rchild;//左右孩子指针}BSTNode,*BSTree;四、参考算法int Search_Seq(SSTable ST, int key){ //在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为 //该元素在表中的位置,否则为0 for (int i=ST.length; i>=1; --i) if (ST.R[i].keykey) return i;//从后往前找 return 0; }// Search_Seqint Search_Bin(SSTable ST,int key) { // 在有序表ST中折半查找其关键字等于key的数据元素。若找到,则函数值为 // 该元素在表中的位置,否则为0 int low=1,high=ST.length;//置查找区间初值 int mid; while(low<=high) { mid=(low+high) / 2; if (keyST.R[mid].key) return mid; //找到待查元素 else if (key<ST.R[mid].key) high = mid -1;//继续在前一子表进行查找 else low =mid +1; //继续在后一子表进行查找 }//while return 0;//表中不存在待查元素}// Search_Bin//算法7.6 二叉排序树的创建void CreateBST(BSTree &T ) { //依次读入一个关键字为key的结点,将此结点插入二叉排序树T中 T=NULL; ElemType e; cin>>e.key; //??? while(e.key!=ENDFLAG){ //ENDFLAG为自定义常量,作为输入结束标志 InsertBST(T, e); //将此结点插入二叉排序树T中 cin>>e.key;//??? }//while }//CreatBST//算法7.4 二叉排序树的递归查找BSTree SearchBST(BSTree T,char key) { //在根指针T所指二叉排序树中递归地查找某关键字等于key的数据元素 //若查找成功,则返回指向该数据元素结点的指针,否则返回空指针 if((!T)|| key==T->data.key) return T; //查找结束 else if (keydata.key) return SearchBST(T->lchild,key);//在左子树中继续查找 else return SearchBST(T->rchild,key); //在右子树中继续查找} // SearchBST
2021-05-22
最新推荐文章于 2023-12-04 16:33:31 发布