数据结构查找算法实验报告毕业用资料.pdf

数据结构查找算法实验报告毕业用资料.pdf

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验报告 实验第四章: 实验: 简单查找算法 一. 需求和规格说明: 查找算法这里主要使用了顺序查找,折半查找,二叉排序树查找和哈 希表查找四种方法。由于自己能力有限,本想实现其他算法,但没有 实现。其中顺序查找相对比较简单,折半查找参考了书上的算法,二 叉排序树查找由于有之前做二叉树的经验,因此实现的较为顺利,哈 希表感觉做的并不成功,感觉还是应该可以进一步完善,应该说还有 很大的改进余地。 二. 设计思想: 开始的时候提示输入一组数据。并存入一维数组中,接下来调用一系 列查找算法对其进行处理。顺序查找只是从头到尾进行遍历。二分查 找则是先对数据进行排序,然后利用三个标志,分别指向最大,中间 和最小数据,接下来根据待查找数据和中间数据的比较不断移动标 志,直至找到。二叉排序树则是先构造,构造部分花费最多的精力, 比根节点数据大的结点放入根节点的右子树,比根节点数据小的放入 根节点的左子树,其实完全可以利用递归实现,这里使用的循环来实 现的,感觉这里可以尝试用递归。当二叉树建好后,中序遍历序列即 为由小到大的有序序列,查找次数不会超过二叉树的深度。这里还使 用了广义表输出二叉树,以使得更直观。哈希表则是利用给定的函数 式建立索引,方便查找。 三. 设计表示: 四. 实现注释: 其实查找排序这部分和前面的一些知识联系的比较紧密,例如顺序表 的建立和实现,顺序表节点的排序,二叉树的生成和遍历,这里主要 是中序遍历。应该说有些知识点较为熟悉,但在实现的时候并不是那 么顺利。在查找到数据的时候要想办法输出查找过程的相关信息,并 统计。这里顺序查找和折半查找均使用了数组存储的顺序表,而二叉 树则是采用了链表存储的树形结构。为了直观起见,在用户输入了数 据后,分别输出已经生成的数组和树。折半查找由于只能查找有序表, 因此在查找前先调用函数对数据进行了排序。 在查找后对查找数据进行了统计。二叉排序树应该说由于有了之前二 叉树的基础,并没有费太大力气,主要是在构造二叉树的时候,要对 新加入的节点数据和跟数据进行比较,如果比根节点数据大则放在右 子树里,如果比根节点数据小则放入左子树。建立了二叉树后,遍历 和查找就很简单了。而哈希表,应该说自我感觉掌握的很不好,程序 主要借鉴了书上和ppt上的代码,但感觉输出还是有问题,接下来应 该进一步学习哈希表的相关知识。 其实原本还设计了其他几个查找和排序算法,但做到哈希表就感觉很 困难了,因此没有继续往下做,而且程序还非常简陋,二叉树和哈希 表的统计部分也比较薄弱,这也是接下来我要改进的地方。 具体代码见源代码部分。 5.详细设计表示: 6.用户手册: 程序运行后,用户首先要输入数据的个数。接下来输入一组数据并根 据提示进行顺序查找,二分查找,二叉排序树查找和哈希表查找等操 作,由于操作直接简单这里不再详述。 7.调试报告: 应该说在调试这个程序的过程中自己发现了很多不足,这次实验让我 学到了不少东西,但应该说这个程序可实现的功能还是偏少,不太实 用,接下来有待改进。 8.源代码清单和结果: #include <stdio.h> #define LENGTH 100 #include <stdlib.h> #include <time.h> #define INFMT "%d" #define OUTFMT "%d " /* #define NULL 0L */ #define BOOL int #define TRUE 1 #define FALSE 0 #define LEN 10000 typedef int ElemType; typedef struct BSTNode { ElemType data; struct BSTNode *lchild, *rchild; } BSTNode, *BSTree; typedef BSTree BiTree; /* 插入新节点 */ void Insert(BSTree *tree, ElemType item) { BSTree node (BSTree)malloc(sizeof(BSTNode)); node->data item; node->lchild node->rchild NULL; if (!*tree) *tree node; else { BSTree cursor *tree; while (1) {

文档评论(0)

197918 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档