实验目的:
1•掌握几种典型的查找方法(顺序查找、折半查找、二又排序树查找、哈希查找),对各种算法的特点、使用范围和效率有进一步的了解;
2、能用C语言实现这些查找算法设计一个程序,用于演示顺序查找、折半查找和二叉排序树查找等几种典型的查找方法,要求采用菜单的形式进行选择。
实验内容:
查找表结构定义如下
typedef struct '
int key; 1/主关键宇
• 1数据元素其他项的信息可不定义;
} ElemType;
typedef struct {
ElemType *R; 1/表基址
int
length; 1/表长
}SSTable;
基于如上存储结构,设计一个程序,用于演示顺序
查找、折半查找和二叉排序树查找等几种典型的查找
方法,要求采用菜单的形式进行选择
1.理解并程序实现顺序查找算法;
2.理解并程序实现折半查找算法;
3.理解并程序实现二叉排序树的创建,并将其创建的二叉排序树进行中序遍历进行验证;
4. 在第3题的基础上,实现如下功能:根据给定某个
关键字值,用递归算法在已经创建好的二叉排序树查
找该关键字值是否存在,如果存在,返回指向该结点的指针,否则返回空指针
求解!
数据结构实验报告 救!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 流比 2022-12-31 20:28关注
// 查找表结构 typedef struct { int key; // 主关键字 // 其他数据元素的信息可不定义 } ElemType; typedef struct { ElemType *R; // 表基址 int length; // 表长 } SSTable; // 顺序查找算法 int Sequential_Search(SSTable T, int key) { T.R[0].key = key; // 哨兵 for (int i = T.length; T.R[i].key != key; --i) ; return i; } // 折半查找算法 int Binary_Search(SSTable T, int key) { int low = 1, high = T.length; while (low <= high) { int mid = (low + high) / 2; if (key < T.R[mid].key) high = mid - 1; else if (key > T.R[mid].key) low = mid + 1; else return mid; } return 0; } // 二叉排序树的结点结构 typedef struct BSTNode { int key; // 关键字 struct BSTNode *lchild, *rchild; // 左右孩子指针 } BSTNode, *BSTree; // 创建二叉排序树 BSTree Create_BST(int data[], int n) { BSTree T = NULL; for (int i = 0; i < n; i++) { BSTNode *s = (BSTNode*)malloc(sizeof(BSTNode)); s->key = data[i]; s->lchild = s->rchild = NULL; if (!T) T = s; else { BSTNode *p = T, *q; while (p) { q = p; if (s->key < p->key) p = p->lchild; else p = p->rchild; } if (s->key < q->key) q->lchild = s; else q->rchild = s; } } return T; } // 中序遍历二叉排序树 void InOrder_Traverse(BSTree T) { if (T) { InOrder_Traverse(T->lchild); printf("%d ", T->key); InOrder_Traverse(T->rchild); } } // 在二叉排序树上查找给定的关键字值是否存在 BSTNode* BST_Search(BSTree T, int key) { if (!T || T->key == key) return T; else if (key < T->key) return BST_Search(T->lchild, key); else return BST_Search(T->rchild, key); }
解决 无用评论 打赏 举报
悬赏问题
- ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
- ¥30 STM32 INMP441无法读取数据
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
- ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
- ¥30 c#打开word开启修订并实时显示批注
- ¥15 如何解决ldsc的这条报错/index error