收藏 分享(赏)

实验五: 查找算法应用.doc

上传人:精品资料 文档编号:10690494 上传时间:2019-12-28 格式:DOC 页数:12 大小:218.78KB
下载 相关 举报
实验五:  查找算法应用.doc_第1页
第1页 / 共12页
实验五:  查找算法应用.doc_第2页
第2页 / 共12页
实验五:  查找算法应用.doc_第3页
第3页 / 共12页
实验五:  查找算法应用.doc_第4页
第4页 / 共12页
实验五:  查找算法应用.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、实验报告学院(系)名称:计算机与通信工程学院姓名 * * 学号 * * 专业 计算机科学与技术班级 2015 级*班 实验项目 实验五: 查找算法应用 课程名称 数据结构与算法 课程代码 0661013实验时间 年 月 日第节 实验地点 7-*考核标准 实验过程 25 分 程序运行 20 分 回答问题 15 分 实验报告 30 分特色功能5 分考勤违纪情况5 分 成绩成绩栏考核内容评价在实验课堂中的表现,包括实验态度、编写程序过程等内容等。功能完善, 功能不全有小错无法运行正确基本正确有提示无法回答完整较完整一般内容极少无报告有无有无其它批改意见:教师签字:一、实验目的实验目的:理解二叉排序树

2、、AVL 树的查找、插入、删除、建立算法的思想及程序实现;掌握散列存储结构的思想,能选择合适散列函数,实现不同冲突处理方法的散列表的查找、建立。能运用所学查找结构与算法等解决实际问题。二、实验题目与要求1.折半查找算法 1)问题描述:从键盘读入一串整数和一个待查关键字,查找在该整数串中是否有这个待查关键 字。如果有,输出它在整数串中的位置;如果没有,输出-1 2)实验要求: 利用折半查找算法查找 用递归和非递归两种方式实现折半查找算法 3) 实现提示: 递归实现参考书上折半查找算法的实现 非递归算法利用栈实现 2.构造二叉排序树,并进行中序遍历(实验类型:综合型) 1)问题描述:从键盘读入一串

3、整数构造一棵二叉排序树,并对得到的二叉排序树进行中序遍历,得到有序序列。 2)实验要求:该二叉排序树以二叉链表存储 3)实现提示:二叉排序树的构成,可从空的二叉树开始,每输入一个结点数据,就建立一个新 结点插入到当前已生成的二叉排序树中,所以它的主要操作是二叉排序树插入运算。在二叉排序树 中插入新结点,只要保证插入后仍符合二叉排序树的定义即可。 3哈希表查找 1)问题描述:针对某个集体的“人名”构造哈希表,解决按“人名”进行查找的索引结构。 2)实验要求:要求表的平均查找长度不超过 R(R 可以从键盘输入确定) ,完成相应的建表和 查表程序。 4. 拼写检查 1)问题描述:现在有一些英语单词需

4、要做拼写检查,你的工具是一本词典。需要检查的单词, 有的是词典中的单词,有的与词典中的单词相似,你的任务是发现这两种情况。单词 A 与单词 B 相 似的情况有三种: 删除单词 A 的一个字母后得到单词 B; 用任意一个字母替换单词 A 的一个字母后得到单词 B; 在单词 A 的任意位置增加一个字母后得到单词 B。 2)实验要求:发现词典中与给定单词相同或相似的单词。 实验过程与实验结果应包括如下主要内容: 数据结构定义 数表的查找方法通常适用于动态集合。动态集合的特点是集合结构本身在查找过程中动态生成,即对于给定值 k,若集合中存在关键字等于 k 的记录,则查找成功,否则插入关键字为 k 的新

5、记录。 二叉排序树,又叫二叉查找树或二叉搜索树。它或者是一棵空树,或者是一棵具有如下特征的非空二叉树: 1)若它的左子树非空,则左子树上所有节点的关键字均小于根节点的关键字。 2)若它的右子树非空,则右子树上所有节点的关键字均大于根节点的关键字。 3)左、右子树也分别是二叉排序树。 平衡二叉树的定义是:若一棵二叉排序树中每个节点的左、右子树的高度之差的绝对值不超过 1,则称这样的二叉排序树为平衡二叉树。 算法设计思路简介 1、 数据有序,用折半查找法,通过即可快速找到关键字。 2、 二叉树表实际上就是个二叉树,就像建立一个普通的二叉树一样建立树,只是在插入节点的时候要和当前节点的值比较,若当前

6、节点为空则插入当前节点;否则,若小于当前值则插入左子树大于当前节点就插入右子树。对建立好的树进行中序遍历即可得到有序序列。 3、 人的姓一般有很大可能性相同,但是人名的第二个字一般是不同的,既然人名示例是拼音形式姑且认为第二个字母即为第二个字。将其 ASCLL 码模 49 作为哈希函数,将各人名分类存在不同的链表中,提高查询效率。 算法描述:可以用自然语言、伪代码或流程图等方式4、以单词中字母的数目为标准将单词分类,若字母数想等或相差一则进行细致的比较(下面有详细描述) ,否则根本不相似。1、=是否是否2、(1)创建普通二叉树节点。(2)输入要插入的值 k。(3)将 k 插入二叉树节点中,若当

7、前节点为空则申请节点空间并将 k 存入当前节点的 data 域中,令其开始输入 ai,keyi = 1,2,3,nlow = 1,high = nmid = (low+high)/2mid = key?k using namespace std;int binarysearch(int array,int Key,int N)int low = 1;int high = N;int mid;while(low n;cin key;for(int i = 1;i ai;result = binarysearch(a,key,n);cout using namespace std;int coun

8、t = 0;int N = 0;typedef struct BitNodeint data;struct BitNode *lchild,*rchild;BitNode,*BitTree;void insert(BitTree T-data = k;T-lchild = T-rchild = NULL;else if(k data) insert(T-lchild,k);else if(k T-data) insert(T-rchild,k);else if(k = T-data) insert(T-lchild,k);void InOrder(BitNode *T) if(T = NULL

9、) return;InOrder(T-lchild);cout data;count+;/cout rchild);int main()BitNode *root;root = NULL;int a20 = 0;for(int j = 0;j aj;N+;if(aj = -1)N-;break;int i = 0;while(ai != -1)insert(root,ai);i+;/cout #includeusing namespace std;typedef struct Hashchar data50;struct Hash *next;Hash;typedef structint da

10、ta;struct Hash *next;FirstHash30;int main()int n,q;int counts;cin n;cin q;char name5050;char checkname5050;FirstHash *h;h = (FirstHash*)malloc(sizeof(FirstHash50);for(int i = 0;i data = i;hi-next = NULL;for(int i = 0;i namei;/cout data,namei);/cout data:“ data next = hcounts-next;hcounts-next = hash

11、;/以?上?程 序没?问题 afor(int i = 0;i checknamei;for(int i = 0;i next = NULL)cout next;while(temp!= NULL if(temp = NULL)cout using namespace std;char Dic5050;char Check5050;int getLength(char array)/得到单词的长度 int i = 0;while(arrayi != 0)i+;return i;int research(char array1,char array2)/字典,待查词汇 ,字典中的某个单词与某个待查

12、单词是否相似 int count1 = 0;int count2 = 0;int simble = 0;count1 = getLength(array1);count2 = getLength(array2);/ cout = count1-1)return 1;elsereturn 0;else if(count1 = count2-1)/比字典长度长 1 simble = 0;int i = 0,j = 0;while(j = count1)return 1;elsereturn 0; else if(count1 = count2+1)/比字典长度短 1 int i = 0,j = 0

13、;simble = 0;while(i = count1-1)return 1;elsereturn 0;elsereturn 0;int main()int n = 0;/字典中的单词数量 int q = 0;/待查单词数量 int count = 0;/字典中的单词与某个待查单词相似的数目 cin n;cin q;for(int i = 0;i Dici;for(int j = 0;j Checkj;for(int i = 0;i q;i+)/将 i 号待查单词与字典中的每一个单词进行比较 count = 0;for(int j = 0;j n;j+)count += research(Dicj,Checki);if(count = 0)cout 0 endl;elsecout 1 endl;return 0;

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报