数据结构实验(关于排序二叉树和哈希表)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八查找
8.1 实验目的:
(1)熟悉掌握各种查找方法,深刻理解各种查找算法及其执行的过程;
(2)学会分析各种查找算法的性能。
8.2 实验要求:
(1)复习课本中有关查找的知识;
(2)用C语言完成算法和程序设计并上机调试通过;
(3)撰写实验报告,给出算法思路或流程图和具体实现(源程序)、算法分析结果(包括时间复杂度、空间复杂度以及算法优化设想)、输入数据及程序运行结果(必要时给出多种可能的输入数据和运行结果)。
8.3 基础实验
[实验1] 顺序查找的设计与实现
实验内容与要求:
编写一个程序实现在顺序表{7,8,34,5,9,12,10,2,4}中查找9的过程。
分析:
算法思想参照课本。
参考程序:
#include
#define MAXL 100 /*定义表中最多记录个数*/
typedef int KeyType;
typedef char InfoType[10];
typedef struct
{
KeyType key; /*KeyType为关键字的数据类型*/
InfoType data; /*其他数据*/
} NodeType;
typedef NodeType SeqList[MAXL]; /*顺序表类型*/
int SeqSearch(SeqList R,int n,KeyType k) /*顺序查找算法*/
{
int i=0;
while (i { printf("%d ",R[i].key); i++; /*从表头往后找*/ } if (i>=n) return -1; else { printf("%d",R[i].key); return i; } } void main() { SeqList R; int n=10; KeyType k=9; int a[]={7,8,34,5,9,12,10,2,4},i; for (i=0;i R[i].key=a[i]; printf("\n"); if ((i=SeqSearch(R,n,k))!=-1) printf("\n元素%d的位置是%d\n",k,i); else printf("\n元素%d不在表中\n",k); printf("\n"); } [实验2] 折半查找的设计与实现 实验内容与要求: 编写一个程序,实现对顺序表{2,4,6,8,10,12,14,16}进行折半查找关键字14的过程。 分析: 算法思想参照课本。 参考程序: #include #define MAXL 100 /*定义表中最多记录个数*/ typedef int KeyType; typedef char InfoType[10]; typedef struct { KeyType key; /*KeyType为关键字的数据类型*/ InfoType data; /*其他数据*/ } NodeType; typedef NodeType SeqList[MAXL]; /*顺序表类型*/ int BinSearch(SeqList R,int n,KeyType k) /*二分查找算法*/ { int low=0,high=n-1,mid,count=0; while (low<=high) { mid=(low+high)/2; printf("第%d次查找:在[%d,%d]中查找到元素R[%d]:%d\n", ++count,low,high,mid,R[mid].key); if (R[mid].key==k) /*查找成功返回*/ return mid; if (R[mid].key>k) /*继续在R[low..mid-1]中查找*/ high=mid-1; else low=mid+1; /*继续在R[mid+1..high]中查找*/ } return -1; } void main() { SeqList R; KeyType k=14; int a[]={2,4,6,8,10,12,14,16},i,n=10; for (i=0;i R[i].key=a[i]; printf("\n"); if ((i=BinSearch(R,n,k))!=-1) printf("元素%d的位置是%d\n",k,i); else printf("元素%d不在表中\n",k); printf("\n"); } 8.4 提高实验 [实验1] 二叉排序树的设计与实现。 实验内容与要求: 编写一个程序实现二叉排序树的基本运算,并在此基础上完成如下功能: (1)由{4,9,0,1,8,6,3,5,2,7}创建一棵bt并以括号表示法输出; (2)判断bt是否为一棵二叉排序树; (3)采用递归和非递归两种方法查找关键字为6的结点,并输出其查找路径; (4)分别删除bt中的关键字为4和5的结点,并输出删除后的二叉排序树。 分析: 二叉排序树的查找过程如下:即当二叉排序树不为空的时候,首先将给定值和根结点的关键字比较,若相等,则查找成功,否则将依据给定值和根结点的关键字之间的大小关系,分