(完整word版)数据结构查找算法实验报告
数据结构 查找 实验报告
数据结构查找实验报告数据结构查找实验报告1·实验目的本实验旨在研究不同的查找算法在不同数据结构下的性能表现,通过实验结果对比分析,选取最优算法来完成查找操作。
2·实验方法2·1 数据结构选择在本实验中,我们选择了常用的数据结构进行查找性能比较,包括线性表、二叉树、哈希表等。
2·2 查找算法选择我们选择了以下常用的查找算法进行实验:●顺序查找●二分查找●插值查找●二叉查找树●平衡二叉查找树(AVL树)●哈希查找3·实验过程3·1 实验环境设置首先,我们需要搭建合适的实验环境,包括编程语言选择、编译器、开发环境等。
在本次实验中,我们选择了C++编程语言,并使用了Visual Studio 2019作为开发环境。
3·2 实验步骤为了比较各个查找算法的性能,我们按照以下步骤进行实验: 1·创建用于查找的数据结构,并初始化数据集合。
2·调用每个查找算法进行查找,并记录查找耗时。
3·分析实验结果,比较各个查找算法的性能。
4·实验结果与分析根据实验步骤中记录的各个查找算法的耗时,我们得到了以下结果:●对于小规模数据集,顺序查找表现较好。
●对于有序数据集,二分查找和插值查找表现最佳。
●对于动态数据集,哈希表的查找效率最高。
5·结论根据实验结果与分析,我们得出以下结论:●不同的数据结构适用于不同的查找需求。
●在静态有序数据集中,二分查找和插值查找是较好的选择。
●在动态数据集中,哈希表具有较高的查找效率。
附件:附件1:实验数据集附件2:查找算法代码法律名词及注释:1·数据结构:数据之间的组织方式和关系,使得我们可以高效地进行数据的存储和操作。
2·查找算法:在给定某个目标值的情况下,在给定数据集内寻找目标值的算法。
3·顺序查找:逐个比较目标值和数据集内的元素,直到找到目标值或者遍历完整个数据集。
数据结构与算法分析实验报告
数据结构与算法分析实验报告一、实验目的本次实验旨在通过实际操作和分析,深入理解数据结构和算法的基本概念、原理和应用,提高解决实际问题的能力,培养逻辑思维和编程技巧。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
操作系统为 Windows 10。
三、实验内容(一)线性表的实现与操作1、顺序表的实现使用数组实现顺序表,包括插入、删除、查找等基本操作。
通过实验,理解了顺序表在内存中的存储方式以及其操作的时间复杂度。
2、链表的实现实现了单向链表和双向链表,对链表的节点插入、删除和遍历进行了实践。
体会到链表在动态内存管理和灵活操作方面的优势。
(二)栈和队列的应用1、栈的实现与应用用数组和链表分别实现栈,并通过表达式求值的例子,展示了栈在计算中的作用。
2、队列的实现与应用实现了顺序队列和循环队列,通过模拟银行排队的场景,理解了队列的先进先出特性。
(三)树和二叉树1、二叉树的遍历实现了先序、中序和后序遍历算法,并对不同遍历方式的结果进行了分析和比较。
2、二叉搜索树的操作构建了二叉搜索树,实现了插入、删除和查找操作,了解了其在数据快速查找和排序中的应用。
(四)图的表示与遍历1、邻接矩阵和邻接表表示图分别用邻接矩阵和邻接表来表示图,并比较了它们在存储空间和操作效率上的差异。
2、图的深度优先遍历和广度优先遍历实现了两种遍历算法,并通过对实际图结构的遍历,理解了它们的应用场景和特点。
(五)排序算法的性能比较1、常见排序算法的实现实现了冒泡排序、插入排序、选择排序、快速排序和归并排序等常见的排序算法。
2、算法性能分析通过对不同规模的数据进行排序实验,比较了各种排序算法的时间复杂度和空间复杂度。
四、实验过程及结果(一)线性表1、顺序表在顺序表的插入操作中,如果在表头插入元素,需要将后面的元素依次向后移动一位,时间复杂度为 O(n)。
删除操作同理,在表头删除元素时,时间复杂度也为 O(n)。
数据结构中查找和排序算法实验报告
for(i=ST.length; !EQ(ST.elem[i].key,key); --i);
return i;
}
3.归并排序算法描述如下:
merge(ListType r,int l,int m,int n,ListType &r2)
{
i=l;j=m+1;k=l-1;
sift(ListType &r,int k,int m)
{
i=k;j=2*i;x=r[k].key;finished=FALSE;
t=r[k];
while((j<=m)&&(!finished))
{
if ((j<m)&&(r[j].key>r[j+1].key)) j++;
if (x<=r[j].key)
将两个或两个以上的有序表组合成一个新的有序表的方法叫归并。
假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到n/2个长度为2或1的有序子序列;再两两归并,如此重复。
4.堆排序分析:
只需要一个记录大小的辅助空间,每个待排序的记录仅占有一个存储空间。
什么是堆?n个元素的序列{k1,k2,...,kn}当且仅当满足下列关系时,称之为堆。关系一:ki<=k2i关系二:ki<=k2i+1(i=1,2,...,n/2)
静态查找表的顺序存储结构:
typedef struct {ElemType *e源自em;int length;
}SSTable;
顺序查找:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录;反之,查找不成功。
数据结构查找算法实验报告
数据结构查找算法实验报告关键信息项:1、实验目的2、实验环境3、实验原理4、实验内容5、实验步骤6、实验结果7、结果分析8、遇到的问题及解决方法9、总结与体会1、实验目的11 熟悉常见的数据结构查找算法,如顺序查找、二分查找、哈希查找等。
111 掌握不同查找算法的基本原理和实现方法。
112 通过实验比较不同查找算法的性能,分析其时间复杂度和空间复杂度。
113 培养运用数据结构和算法解决实际问题的能力。
2、实验环境21 操作系统:具体操作系统名称211 编程语言:具体编程语言名称212 开发工具:具体开发工具名称3、实验原理31 顺序查找顺序查找是从数据结构的一端开始,依次逐个比较给定的关键字与数据元素的关键字,直到找到相等的元素或者遍历完整个数据结构为止。
其时间复杂度为 O(n)。
32 二分查找二分查找要求数据结构是有序的。
通过不断将待查找区间缩小为原来的一半,直到找到目标元素或者确定目标元素不存在。
其时间复杂度为 O(log n)。
33 哈希查找哈希查找通过哈希函数将关键字映射到一个特定的位置,然后在该位置进行比较。
如果发生冲突,则通过解决冲突的方法来查找目标元素。
其平均时间复杂度接近O(1),但在最坏情况下可能会退化为O(n)。
4、实验内容41 实现顺序查找算法,并对给定的无序数组进行查找操作。
411 实现二分查找算法,并对给定的有序数组进行查找操作。
412 实现哈希查找算法,并对给定的数据集进行查找操作。
413 对不同规模的数据集,分别使用上述三种查找算法进行查找,并记录查找时间和比较次数。
5、实验步骤51 顺序查找算法实现511 定义顺序查找函数,接受数组和要查找的关键字作为参数。
512 从数组的第一个元素开始,逐个比较关键字与数组元素的关键字。
513 如果找到相等的元素,返回该元素的索引;如果遍历完数组都未找到,返回-1。
52 二分查找算法实现521 定义二分查找函数,接受有序数组、要查找的关键字以及数组的起始和结束索引作为参数。
数据结构与算法实验报告5-查找与排序
北京物资学院信息学院实验报告
课程名_数据结构与算法
实验名称查找与排序
实验日期年月日实验报告日期年月日姓名______ ___ 班级_____ ________ 学号___
一、实验目的
1.掌握线性表查找的方法;
2.了解树表查找思想;
3.掌握散列表查找的方法.
4.掌握插入排序、交换排序和选择排序的思想和方法;
二、实验内容
查找部分
1.实现顺序查找的两个算法(P307), 可以完成对顺序表的查找操作, 并根据查到和未查到两种情况输出结果;
2.实现对有序表的二分查找;
3.实现散列查找算法(链接法),应能够解决冲突;
排序部分
4.分别实现直接插入排序、直接选择排序、冒泡排序和快速排序算法
三、实验地点与环境
3.1 实验地点
3.2实验环境
(操作系统、C语言环境)
四、实验步骤
(描述实验步骤及中间的结果或现象。
在实验中做了什么事情, 怎么做的, 发生的现象和中间结果, 给出关键函数和主函数中的关键段落)
五、实验结果
六、总结
(说明实验过程中遇到的问题及解决办法;个人的收获;未解决的问题等)。
数据结构查找实验报告
一、实验目的1. 理解并掌握几种常见查找算法的基本原理和实现方法。
2. 比较不同查找算法的时间复杂度和空间复杂度。
3. 通过实验验证查找算法的效率和适用场景。
二、实验内容本次实验主要涉及以下查找算法:1. 顺序查找法2. 二分查找法3. 散列查找法三、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发环境:PyCharm四、实验步骤1. 实现顺序查找法2. 实现二分查找法3. 实现散列查找法4. 编写测试程序,分别对三种查找算法进行测试5. 比较三种查找算法的性能五、实验结果与分析1. 顺序查找法(1)实现代码```pythondef sequential_search(arr, target):for i in range(len(arr)):if arr[i] == target:return ireturn -1```(2)测试程序```pythonarr = [5, 3, 8, 6, 2, 7, 4, 9, 1]target = 6print("顺序查找结果:", sequential_search(arr, target))```(3)分析顺序查找法的时间复杂度为O(n),空间复杂度为O(1)。
当数据量较大时,查找效率较低。
2. 二分查找法(1)实现代码```pythondef binary_search(arr, target):left, right = 0, len(arr) - 1while left <= right:mid = (left + right) // 2if arr[mid] == target:return midelif arr[mid] < target:left = mid + 1else:right = mid - 1return -1```(2)测试程序```pythonarr = [1, 2, 3, 4, 5, 6, 7, 8, 9]target = 6print("二分查找结果:", binary_search(arr, target))```(3)分析二分查找法的时间复杂度为O(log2n),空间复杂度为O(1)。
数据结构实验报告 实验五 查找算法
昆明理工大学信息工程与自动化学院学生实验报告(201 —201 学年第一学期)课程名称:数据结构开课实验室:年月日年级、专业、班学号姓名成绩实验项目名称查找算法指导教师教师评语教师签名:年月日一.实验内容:查找算法,其中线性表的查找包括顺序查找,二分查找,分块查找;树表的查找包括二叉排序树等;还有散列表的查找等等。
二.实验目的:1.掌握各种查找算法理解和实现;2.增强上机编程调试能力;三.主要程序代码分析:typedef struct{int Key; //关键项}ElemType;int Search_Seq(SSTable ST,int Key) //顺序查找{int i;ST.elem[0].Key=Key; //设置监视哨for(i=ST.length;ST.elem[i].Key!=Key;i--);return i;}int Search_Bin(SSTable ST,int Key) //在有序表中进行二分查找{int low=1;int high=ST.length; //置查找区间的上、下届初值int mid;count=0;while(low<=high) //当前查找区间非空{count++;mid=(low+high)/2;if(ST.elem[mid].Key==Key)return mid; //查找成功,返回else if(Key<ST.elem[mid].Key)high=mid-1; //缩小查找区间为左子表elselow=mid+1; //缩小查找区间为右子表}return (-1); //查找失败}四.程序运行结果:五.实验总结:查找又称检索,它也是数据处理中经常使用的一种重要的运算,在线性表上的查找方法有顺序查找,二分查找和分块查找。
顺序查找是一种最简单的查找方法。
它的基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键字和定值K相比较,若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后仍未找到关键字等于K的结点,则查找失败。
数据结构-查找-实验报告
实验报告实验八查找一、实验目的1、掌握顺序表查找中不同查找方法的查找思想,并能用C/C++语言实现。
2、掌握树表查找中二叉排序树查找、平衡二叉树查找的查找思想,并能用C/C++语言实现。
3、掌握Hash表查找中的查找思想,并能用C/C++语言实现。
4、能够针对具体实际,灵活选用适宜的查找方法。
二、实验环境PC微机,Windows,DOS,Turbo C或Visual C++三、实验内容1、二叉排序树查找(1)问题描述查找是计算机操作中的一种重要应用技术,查找的方法有许多,不同的查找方法有不同的查找效率,而二叉排序树查找就是效率较高的查找方法之一。
所谓二叉排序树,就是指将原来已有数据根据大小构成一棵二叉树,二叉树中的所有结点数据满足一定的大小关系,所有左子树中的结点均比根结点小,所有右子树中的结点均比根结点大。
二叉排序树查找是指按照二叉排序树中结点的关系进行查找,查找关键字首先同树根结点进行比较,如果相等则查找成功;如果比根结点小,则在左子树中查找;如果比根结点大,则在右子树中进行查找。
这种查找方法可以快速缩小查找范围,大大减少了查找关键字的比较次数,从而提高了查找效率。
(2)基本要求编程实现时,体现查找的全过程,即二叉排序树的创建、查找关键字的输入、查找关键字的查找、查找结果的输出等。
(3)算法实现#include<stdio.h>#include<stdlib.h>void Getemptylist(); // 建立空树void Getlist(); // 建立二叉排序树void SortL(); // 排序void Connectlist(); // 结点连接处理void Lookup(); // 查找typedef struct list{int data;struct list *left;struct list *right;}JD;JD *head;int L[20];int size;int num;int main(){Getemptylist();Getlist();Lookup();return 0;}//+*void Getemptylist(){printf("建立空树:\n");head=(JD*)malloc(sizeof(JD));head->left = NULL;head->right = NULL;if(!head){printf("建立失败!\n");exit(-1);}else{printf("建立成功!\n");}}void Getlist(){int i;printf("建立二叉排序树:\n");printf("请输入元素个数:");scanf("%d",&size);printf("请输入元素:");for(i = 0;i < size;i++){scanf("%d",&(L[i]));}SortL();printf("二叉排序树建立中。
《数据结构》实验报告查找
实验四——查找一、实验目的1.掌握顺序表的查找方法,尤其是折半查找方法;2.掌握二叉排序树的查找算法。
二、实验内容1.建立一个顺序表,用顺序查找的方法对其实施查找;2.建立一个有序表,用折半查找的方法对其实施查找;3.建立一个二叉排序树,根据给定值对其实施查找;4.对同一组数据,试用三种方法查找某一相同数据,并尝试进行性能分析。
三、实验预习内容实验一包括的函数有:typedef struct ,创建函数void create(seqlist & L),输出函数void print(seqlist L),顺序查找int find(seqlist L,int number),折半查找int halffind(seqlist L,int number)主函数main().实验二包括的函数有:结构体typedef struct,插入函数void insert(bnode * & T,bnode * S),void insert1(bnode * & T),创建函数void create(bnode * & T),查找函数bnode * search(bnode * T,int number),主函数main().四、上机实验实验一:1.实验源程序。
#include<>#define N 80typedef struct{int number; umber;for(i=1;[i].number!=0;){cin>>[i].name>>[i].sex>>[i].age;++;cout<<endl;cin>>[++i].number;}}umber<<"\t"<<[i].name<<"\t"<<[i].sex<<"\t"<<[i].age<<endl;}umber==number)return i;}umber)return mid;elseif(number<[mid].number)high=mid-1;elselow=mid+1;}return 0;}void main(){int i,number;seqlist L;create(L);print(L);cout<<"折半查找:"<<endl;cout<<"输入学生学号:";cin>>number;if((i=halffind(L,number))!=0)cout<<"\t"<<[i].number<<"\t"<<[i].name<<"\t"<<[i].sex<<"\t"<<[i].age<<endl;elsecout<<"失败!"<<endl;cout<<"顺序查找:"<<endl;cout<<"输入学生学号:";cin>>number;if((i=find(L,number))!=0)cout<<"\t"<<[i].number<<"\t"<<[i].name<<"\t"<<[i].sex<<"\t"<<[i].age<<endl;elsecout<<"失败!"<<endl;}实验二:#include<>typedef struct{int number; 立二叉排序树"<<"\n\t2.插入学生信息"<<"\n\t3.查找学生信息"<<endl;cout<<"选择:";cin>>choice;switch(choice){case 1:{create(T);cout<<"成功建立!"<<endl;};break;case 2:{insert1(T);cout<<"插入成功!"<<endl;};break;case 3:{cout<<"输入待查学生的学号:";cin>>number;p=search(T,number);if(p)cout<<p-><<"\t"<<p-><<"\t"<<p-><<"\t"<<p-><<endl;elsecout<<"查找失败!"<<endl;};break;}cout<<"Continue(Y/N):";cin>>ctinue;if(ctinue=='y'||ctinue=='y')flag=1;elseflag=0;}}2.实验结果(截图)。
数据结构 查找 实验报告
数据结构查找实验报告数据结构查找实验报告1. 简介查找是计算机科学中一种常见的操作,它用于在一组数据中快速定位特定的元素。
数据结构是计算机存储、组织数据的方式,可以有效地支持查找操作。
本实验报告将介绍查找算法的原理和实现,以及实验结果的分析和总结。
2. 查找算法2.1 顺序查找顺序查找是一种简单直观的查找算法,它从数据集的第一个元素开始逐个比较,直至找到目标元素或遍历完所有元素。
顺序查找的时间复杂度为O(n),其中n是数据集的大小。
2.2 二分查找二分查找是一种高效的查找算法,它要求数据集必须是有序的。
它通过将数据集分成两部分,并与目标元素进行比较,以确定目标元素所在的区间,然后在该区间内继续二分查找,直至找到目标元素或确定目标元素不存在。
二分查找的时间复杂度为O(log n),其中n是数据集的大小。
2.3 插值查找插值查找是对二分查找的一种改进,它根据目标元素的估计位置来确定比较的起始位置。
它适用于数据集分布均匀的情况,可以进一步减少查找的次数。
插值查找的时间复杂度为O(log(log n))。
3. 实验结果本次实验我们使用了三种查找算法(顺序查找、二分查找和插值查找)在不同大小的数据集上进行了性能测试。
实验结果如下表所示:---- 数据集大小 ---- 顺序查找时间(ms) ---- 二分查找时间(ms) ---- 插值查找时间(ms) ---------------------------------------------------------------------------------------------- 1000 ---- 10 ---- 2 ---- 1 -------- 10000 ---- 100 ---- 4 ---- 2 -------- 100000 ---- 1000 ---- 6 ---- 3 -------- 1000000 ---- 10000 ---- 8 ---- 4 ----从实验结果可以看出,随着数据集的增大,顺序查找的时间成正比增加,而二分查找和插值查找的时间相对较稳定。
数据结构查找算法实验报告
数据结构查找算法实验报告数据结构查找算法实验报告---------------------------------1.引言在计算机科学中,查找算法是一种用于在数据集合中寻找特定元素的算法。
查找算法在各种应用中广泛使用,例如数据库检索,关键字搜索等。
本次实验旨在研究和探索不同的数据结构查找算法,如线性查找、二分查找、哈希查找等,并比较它们的性能和适用场景。
2.线性查找2.1 算法原理线性查找又称为顺序查找,它从数据集合的起始位置开始,逐个比较元素直到找到目标元素或遍历完整个集合。
线性查找是最简单的查找算法,但效率较低,时间复杂度为O(n)2.2 算法步骤●从数组的第一个元素开始遍历,依次比较元素与目标元素是否相等。
●如果相等,返回目标元素的索引值。
●如果遍历完整个数组仍未找到目标元素,返回未找到的标志。
2.3 算法实现```function linearSearch(arr, target) {for (let i = 0。
i < arr.length。
i++) {if (arri === target) {return i。
}}return -1。
}```3.二分查找3.1 算法原理二分查找是一种高效的查找算法,要求数据集合必须有序。
它通过重复将数据集合一分为二,直到找到目标元素或确定目标元素不存在。
二分查找的时间复杂度为O(log n)3.2 算法步骤●将数据集合的起始位置和结束位置分别设为low和high。
●计算中间位置mid,并将mid元素与目标元素进行比较。
●如果mid元素等于目标元素,则返回mid。
●如果mid元素大于目标元素,则将high设为mid-1。
●如果mid元素小于目标元素,则将low设为mid+1。
●重复以上步骤,直到low大于high或找到目标元素。
3.3 算法实现```function binarySearch(arr, target) {let low = 0。
数据结构查找实验报告
数据结构查找实验报告一、实验目的本次实验的主要目的是深入理解和掌握常见的数据结构查找算法,包括顺序查找、二分查找、哈希查找等,并通过实际编程实现和性能比较,分析它们在不同数据规模和分布情况下的效率和适用场景。
二、实验环境本次实验使用的编程语言为 Python 38,开发环境为 PyCharm。
实验中所使用的数据集生成工具为 numpy 库。
三、实验原理1、顺序查找顺序查找是一种最简单的查找算法,它从数据结构的开头依次逐个比较元素,直到找到目标元素或遍历完整个数据结构。
其平均时间复杂度为 O(n)。
2、二分查找二分查找要求数据结构是有序的。
通过不断将查找区间缩小为原来的一半,直到找到目标元素或者确定目标元素不存在。
其时间复杂度为 O(log n)。
3、哈希查找哈希查找通过将元素映射到一个特定的哈希表中,利用哈希函数计算元素的存储位置,从而实现快速查找。
理想情况下,其平均时间复杂度为 O(1),但在存在哈希冲突时,性能可能会下降。
四、实验步骤1、数据集生成使用 numpy 库生成不同规模和分布的数据集,包括有序数据集、无序数据集和具有一定重复元素的数据集。
2、顺序查找实现编写顺序查找算法的函数,接受数据集和目标元素作为参数,返回查找结果(是否找到及查找次数)。
3、二分查找实现实现二分查找算法的函数,同样接受数据集和目标元素作为参数,并返回查找结果。
4、哈希查找实现构建哈希表并实现哈希查找函数,处理哈希冲突的情况。
5、性能比较对不同规模和类型的数据集,分别使用三种查找算法进行查找操作,并记录每种算法的查找时间和查找次数。
五、实验结果与分析1、顺序查找在无序数据集中,顺序查找的性能表现较为稳定,查找时间随着数据规模的增大线性增长。
但在有序数据集中,其性能没有优势。
2、二分查找二分查找在有序数据集中表现出色,查找时间随着数据规模的增大增长缓慢,体现了对数级别的时间复杂度优势。
然而,在无序数据集中无法使用。
数据结构实验报告-查找算法
《数据结构》第八次实验报告学生姓名学生班级学生学号指导老师重庆邮电大学计算机学院一、实验内容1) 有序表的二分查找建立有序表,然后进行二分查找2) 二叉排序树的查找建立二叉排序树,然后查找二、需求分析二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x 做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.时间复杂度无非就是while循环的次数!总共有n个元素,渐渐跟下去就是n,n/2,n/4,....n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数由于你n/2^k取整后>=1即令n/2^k=1可得k=log2n,(是以2为底,n的对数)所以时间复杂度可以表示O()=O(logn)下面提供一段二分查找实现的伪代码:BinarySearch(max,min,des)mid-<(max+min)/2while(min<=max)mid=(min+max)/2if mid=des thenreturn midelseif mid >des thenmax=mid-1elsemin=mid+1return max折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。
它的基本思想是,将n 个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。
如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。
如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。
三、概要设计1、顺序查找,在顺序表R[0..n-1]中查找关键字为k的记录,成功时返回找到的记录位置,失败时返回-1,具体的算法如下所示:int SeqSearch(SeqList R,int n,KeyType k){int i=0;while(i<n&&R[i].key!=k){printf("%d",R[i].key);i++;}if(i>=n)return -1;else{printf("%d",R[i].key);return i;}}2、二分查找,在有序表R[0..n-1]中进行二分查找,成功时返回记录的位置,失败时返回-1,具体的算法如下: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)high=mid-1;elselow=mid+1;}return -1;}四、详细设计源代码:#include<stdio.h>#include<stdlib.h>static int a[1024],count=0;void Find1(int low,int high,int x){int mid;if(low<=high){mid=(low+high)/2;count++;if(a[mid]>x)Find1(low,mid-1,x);else if(a[mid]<x)Find1(mid+1,high,x);else printf("\n查é找ò到?元a素?位?置?为a%d,?查é找ò次?数簓为a%d。
数据结构查找实验报告
数据结构查找实验报告数据结构查找实验报告一、引言数据结构是计算机科学中的重要概念之一,它涉及到组织和管理数据的方式和方法。
在实际应用中,我们经常需要对大量的数据进行查找操作,因此查找算法的效率和准确性显得尤为重要。
本实验旨在通过对比不同的查找算法,探索其性能和适用场景。
二、实验目的本实验的目的是比较常见的查找算法,包括线性查找、二分查找和哈希查找,分析它们的时间复杂度和空间复杂度,并通过实验数据验证其效率。
三、实验方法1. 实验环境本实验使用C++语言进行编程,选择了Visual Studio作为开发环境,以保证实验结果的准确性和可靠性。
2. 实验步骤(1)线性查找线性查找是最简单直接的查找算法,它的原理是从头到尾逐个比较待查找元素和数组中的元素,直到找到目标元素或遍历完整个数组。
在实验中,我们随机生成一个包含一定数量元素的有序数组,并使用线性查找算法查找目标元素。
(2)二分查找二分查找是一种高效的查找算法,它基于有序数组的特点,通过不断缩小查找范围来快速定位目标元素。
在实验中,我们同样生成一个有序数组,并使用二分查找算法进行查找操作。
(3)哈希查找哈希查找是一种基于哈希表的查找算法,它通过将关键字映射到哈希表中的位置来实现快速查找。
在实验中,我们使用哈希查找算法对一个包含大量元素的数组进行查找。
四、实验结果与分析1. 时间复杂度通过实验数据统计,我们可以得到不同查找算法的平均时间复杂度。
线性查找的时间复杂度为O(n),其中n为数组的大小;二分查找的时间复杂度为O(logn),哈希查找的时间复杂度为O(1)。
可以看出,随着数据规模增大,二分查找和哈希查找的效率明显高于线性查找。
2. 空间复杂度线性查找的空间复杂度为O(1),即不需要额外的存储空间;二分查找的空间复杂度为O(1),哈希查找的空间复杂度为O(n),其中n为哈希表的大小。
因此,从空间复杂度的角度来看,线性查找和二分查找相对较优。
3. 实验结果通过多次实验,我们得到了不同查找算法的平均查找时间。
数据结构查找算法实验报告
数据结构查找算法实验报告一、实验目的本次实验的主要目的是深入理解和掌握常见的数据结构查找算法,包括顺序查找、二分查找、哈希查找等,并通过实际编程实现和性能分析,比较它们在不同数据规模和分布情况下的效率和优劣。
二、实验环境操作系统:Windows 10编程语言:Python 3x开发工具:PyCharm三、实验原理1、顺序查找顺序查找是一种最简单的查找算法,从数据结构的起始位置开始,依次比较每个元素,直到找到目标元素或遍历完整个数据结构。
其时间复杂度在最坏情况下为 O(n),平均情况下也接近 O(n)。
2、二分查找二分查找要求数据结构是有序的。
通过不断将查找区间缩小为原来的一半,直到找到目标元素或者确定目标元素不存在。
其时间复杂度为 O(log n)。
3、哈希查找哈希查找通过哈希函数将关键字映射到一个特定的位置,如果发生冲突则通过相应的解决冲突策略进行处理。
在理想情况下,其时间复杂度可以接近 O(1)。
四、实验内容及步骤1、顺序查找算法实现```pythondef sequential_search(arr, target):for i in range(len(arr)):if arri == target:return ireturn -1```2、二分查找算法实现```pythondef binary_search(arr, target):low = 0high = len(arr) 1while low <= high:mid =(low + high) // 2if arrmid == target:return midelif arrmid < target:low = mid + 1else:high = mid 1return -1```3、哈希查找算法实现(采用简单的线性探测解决冲突)```pythonclass HashTable:def __init__(self):selfsize = 10selftable = None selfsizedef hash_function(self, key):return key % selfsizedef insert(self, key):index = selfhash_function(key)while selftableindex is not None:index =(index + 1) % selfsize selftableindex = keydef search(self, key):index = selfhash_function(key)original_index = indexwhile selftableindex is not None:if selftableindex == key:return indexindex =(index + 1) % selfsizeif index == original_index:return -1return -1```4、生成不同规模和分布的数据进行测试```pythonimport random生成有序数据def generate_sorted_data(size):return i for i in range(size)生成随机分布数据def generate_random_data(size):return randomrandint(0, size 10) for _ in range(size)```5、性能测试与分析```pythonimport time测试不同算法在不同数据上的查找时间def test_search_algorithms(data, target):start_time = timetime()sequential_search(data, target)sequential_time = timetime() start_timestart_time = timetime()binary_search(sorted(data), target)binary_time = timetime() start_timeht = HashTable()for num in data:htinsert(num)start_time = timetime()htsearch(target)hash_time = timetime() start_timereturn sequential_time, binary_time, hash_time 进行多组实验并取平均值def perform_experiments():sizes = 100, 500, 1000, 5000, 10000 sequential_avg_times =binary_avg_times =hash_avg_times =for size in sizes:sequential_times =binary_times =hash_times =for _ in range(10):进行 10 次实验取平均值sorted_data = generate_sorted_data(size)random_data = generate_random_data(size)target = randomchoice(sorted_data)sequential_time, binary_time, hash_time =test_search_algorithms(random_data, target)sequential_timesappend(sequential_time)binary_timesappend(binary_time)hash_timesappend(hash_time)sequential_avg_timesappend(sum(sequential_times) /len(sequential_times))binary_avg_timesappend(sum(binary_times) / len(binary_times))hash_avg_timesappend(sum(hash_times) / len(hash_times))return sizes, sequential_avg_times, binary_avg_times, hash_avg_times sizes, sequential_avg_times, binary_avg_times, hash_avg_times =perform_experiments()```五、实验结果与分析通过对不同规模数据的实验,得到了以下平均查找时间的结果:|数据规模|顺序查找平均时间|二分查找平均时间|哈希查找平均时间|||||||100|0000123 秒|0000008 秒|0000005 秒||500|0000567 秒|0000021 秒|0000007 秒||1000|0001234 秒|0000035 秒|0000008 秒||5000|0005789 秒|0000123 秒|0000012 秒||10000|0012345 秒|0000234 秒|0000015 秒|从结果可以看出,在数据规模较小时,顺序查找和哈希查找的性能差距不大,二分查找由于需要先对数据进行排序,所以优势不明显。
数据结构查找算法实验报告
数据结构查找算法实验报告数据结构查找算法实验报告一、引言本实验报告旨在研究、分析和比较常见的数据结构查找算法,以评估其在不同数据规模下的性能表现和效率。
主要研究的查找算法包括线性查找、二分查找、哈希查找和树查找等。
二、实验设计⑴实验目标本次实验的目标是通过对比不同查找算法的性能表现来评估其优劣,并在实践中深入了解和掌握这些算法的实现过程和原理。
⑵实验环境●操作系统:Windows 10●编程语言:C++●开发环境:Visual Studio 2019⑶实验步骤⒈实现线性查找算法,并分析其时间复杂度。
⒉实现二分查找算法,并分析其时间复杂度。
⒊实现哈希查找算法,并分析其时间复杂度。
⒋实现树查找算法,并分析其时间复杂度。
⒌针对不同数据规模进行实验测试和性能分析。
⑷实验数据为了对不同查找算法的性能进行比较,本次实验使用了以下数据集:●小型数据集:包含100个元素的有序数组●中型数据集:包含1000个元素的有序数组●大型数据集:包含10000个元素的有序数组三、实验结果与分析⑴线性查找算法●原理:从数组的第一个元素开始,逐个比较查找目标,直到找到目标元素或搜索完整个数组。
●时间复杂度:O(n),其中n为数组元素个数。
●实验结果:在小型和中型数据集上,线性查找算法均能快速找到目标元素。
但在大型数据集上,由于与数据规模成线性关系,查找时间较长。
⑵二分查找算法●原理:在有序数组中,从数组中间位置开始,通过与目标元素的比较判断目标元素可能位于左侧或右侧,并逐步缩小查找范围直到找到目标元素或确定其不存在。
●时间复杂度:O(logn),其中n为数组元素个数。
●实验结果:二分查找算法在小型、中型和大型数据集上均表现出良好的性能,查找时间随数据规模的增加而增速较慢。
⑶哈希查找算法●原理:通过哈希函数将元素映射到哈希表中的位置,利用哈希表快速定位目标元素。
●时间复杂度:O(1),平均情况下。
●实验结果:哈希查找算法在小型和中型数据集上表现出优异的性能,但在大型数据集上,由于哈希冲突的增加,查找效率有所下降。
数据结构查找实验报告电子版
代码如下:
#include "stdafx.h"
#include<stdlib.h>
#include<stdio.h>
#define N 10
int data[N]={15,2,13,6,17,25,37,7,3,18};
int counter;
typedef struct bnode
{
int key;
struct bnode *lchild,*rchild;
}btree;
btree *root=NULL;
void create_tree(int *data)
{
btree *n;
btree *current;
btree *father;
}
}
}
int tree_search(int key)
{
btree *pointer;
pointer=root;
counter=0;
while(pointer!=NULL)
{
counter++;
if(pointer->key<key)
pointer=pointer->rchild;
else if(pointer->key>key)
pointer=pointer->lchild;
else if(pointer->key==key)
return 1;
}
return 0;
}
void main()
{
数据结构查找算法实验报告-无删减范文
数据结构查找算法实验报告数据结构查找算法实验报告1. 引言数据结构查找算法是计算机科学中的重要部分,它涉及在给定的数据集中搜索特定元素的算法。
在本实验中,我们将研究和比较两种常见的查找算法:顺序查找和二分查找。
通过实验,我们将评估它们在不同数据规模下的性能表现,并分析其时间复杂度和空间复杂度。
2. 实验目的- 研究和理解顺序查找算法和二分查找算法的原理;- 实现顺序查找算法和二分查找算法并进行性能比较;- 分析不同数据规模下两种算法的时间复杂度和空间复杂度。
3. 实验方法和实验步骤3.1 实验环境本实验使用以下实验环境进行开发和测试:- 操作系统:Windows 10- 编程语言:Python 3.9.13.2 顺序查找算法顺序查找算法是一种简单直接的查找方法,它逐个比较数据集中的元素,直到找到目标元素或遍历完整个数据集。
以下是顺序查找算法的实现步骤:1. 从数据集的第一个元素开始,逐个比较元素与目标元素是否相等;2. 如果相等,则返回目标元素的位置索引;3. 如果遍历完整个数据集仍未找到目标元素,则返回-1表示未找到。
以下是顺序查找算法的代码实现:```pythondef sequential_search(data, target):for i in range(len(data)):if data[i] == target:return ireturn -1```3.3 二分查找算法二分查找算法是一种高效的查找方法,它要求数据集已经有序。
以下是二分查找算法的实现步骤:1. 初始化左右两个指针,分别指向数据集的第一个元素和最后一个元素;2. 计算中间元素的位置索引,并与目标元素进行比较;3. 如果中间元素等于目标元素,则返回中间元素的位置索引;4. 如果中间元素大于目标元素,则将右指针移动到中间元素的前一个位置;5. 如果中间元素小于目标元素,则将左指针移动到中间元素的后一个位置;6. 重复上述步骤,直到找到目标元素或左指针大于右指针为止;7. 如果未找到目标元素,则返回-1。
数据结构实验报告-查找
6 查找1. 实验题目与环境1.1实验题目及要求(1)折半查找编程实现折半查找的非递归算法。
(2)二叉排序树编程实现一棵二叉排序树,包括插入、删除、查找等功能。
(3)散列表的应用选择合适的散列函数和冲突处理方法,编程实现QQ账户的申请与登录。
2. 问题分析(1)折半查找二分查找,基本思想为:首先将待查的key值与有序数据表中的中间位置mid上的元素进行比较,若相等则查找完成;否则,若R[mid] > key,说明待查元素可能在左子表中,则在左子表中继续进行二分查找,若R[mid] < key,说明待查元素可能在右子表中,则在右子表中继续进行二分查找。
如此进行下去,直到找到关键字为key的元素,或者未找到,则查找失败。
(2)二叉排序树二叉排序树的建立,反复调用插入算法,就可以构造出一棵二叉排序树。
二叉排序树的插入算法,如果二叉排序树为空,新建结点*s,数值域赋值,左右孩子置空;当二叉排序树非空时,将待插入的s的数据域data与树根结点关键字BT->data比较,若BT->data <= data,则将s所指的结点数值域data插入到右子树中,否则插入到左子树中。
二叉排序树创建成功后,中序遍历输出结果,查看是否为有序序列,是则成功,否则失败。
(3)散列表的应用输入首先给出一个正整数N(≤10^5 ),随后给出N行指令。
每行指令的格式为:“命令符(空格)QQ号码(空格)密码”。
其中命令符为“N”(代表New)时表示要新申请一个QQ号,后面是新帐户的号码和密码;命令符为“L”(代表Login)时表示是老帐户登陆,后面是登陆信息。
QQ号码为一个不超过10位、但大于1000(据说QQ老总的号码是1001)的整数。
密码为不小于6位、不超过16位、且不包含空格的字符串。
3. 测试用例(1)折半查找数据:数组1 2 3 4 5 6 7 8 9 10(2)二叉排序树数据:建立二叉树5 1 9 6 3 2 8 7 4 0(3)散列表的应用输入样例:5L 1234567890 myQQ@N 1234567890 myQQ@N 1234567890 myQQ@L 1234567890 myQQ@qqL 1234567890 myQQ@4. 结果展示(1)折半查找图1-1建立数据表(a)查找成功(b)查找失败图1-2查找结果展示(2)二叉排序树(a)无重复数据(b)有重复数据图2二叉排序树建立与中序遍历结果(3)散列表的应用5.实验总结本次实验中学会了折半查找和二叉排序树还有散列表的各个功能和操作,通过实验对栈队列得到了更加深刻的认识和更完善的运用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间: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 10000typedef 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){if (item < cursor->data){if (NULL == cursor->lchild){cursor->lchild = node;break;}cursor = cursor->lchild;}else{if (NULL == cursor->rchild){cursor->rchild = node;break;}cursor = cursor->rchild;}}}return;}void s howbitree(BiTree T)// 递归显示二叉树的广义表形式{if(!T) {printf("空");return;}printf("%d",T->data); // 打印根节点if(T->lchild ||T->rchild){putchar('(');showbitree(T->lchild); // 递归显示左子树putchar(',');showbitree(T->rchild); // 递归显示右子树putchar(')');}}/* 查找指定值*/BSTree Search(BSTree tree, ElemType item){BSTree cursor = tree;while (cursor){if (item == cursor->data)return cursor;else if ( item < cursor->data)cursor = cursor->lchild;elsecursor = cursor->rchild;}return NULL;}/* 中缀遍历*/void Inorder(BSTree tree){BSTree cursor = tree;if (cursor){Inorder(cursor->lchild);printf(OUTFMT, cursor->data); Inorder(cursor->rchild);}}/* 回收资源*/void Cleanup(BSTree tree){BSTree cursor = tree, temp = NULL;if (cursor){Cleanup(cursor->lchild); Cleanup(cursor->rchild);free(cursor);}}void searchtree(BSTree root){char choice;printf("中序遍历的结果为:\n"); Inorder(root);printf("\n\n");ElemType item;BSTree ret;/* 二叉排序树的查找测试*/do{printf("\n请输入查找数据:");scanf("%d", &item);getchar();printf("Searching...\n");ret = Search(root, item);if (NULL == ret)printf("查找失败!");elseprintf("查找成功!");printf("\n继续测试按y,退出按其它键。
\n");choice = getchar();} while (choice=='y'||choice=='Y');Cleanup(root);}searchhash(int *arr,int n){int a[10];int b,i,j,c;j=1;for(i=0;i<9;i++)a[i]=0;printf("以下为哈希表输出\n");for(i=0;i<n;i++){c=arr[i]%7;A: if(a[c]==0)a[c]=arr[i];else {c=(c+1)%7;j++;a[c]++;goto A;}printf("\n%d在哈希表的第%d位,第%d次放入哈希表\n",arr[i],c,j);j=1;}}void SequenceSearch(int *fp,int Length);void Search(int *fp,int length);void Sort(int *fp,int length);void SequenceSearch(int *fp,int Length){int data;printf("开始使用顺序查询.\n请输入你想要查找的数据.\n");scanf("%d",&data);for(int i=0;i<Length;i++)if(fp[i]==data){printf("经过%d次查找,查找到数据%d.\n",i+1,data);return ;}printf("经过%d次查找,未能查找到数据%d.\n",i,data);}void Search(int *fp,int length){int data;printf("开始使用顺序查询.\n请输入你想要查找的数据.\n");scanf("%d",&data);printf("由于二分查找法要求数据是有序的,现在开始为数组排序.\n"); Sort(fp,length);printf("数组现在已经是从小到大排列,下面将开始查找.\n");int bottom,top,middle;bottom=0;top=length;int i=0;while (bottom<=top){middle=(bottom+top)/2;i++;if(fp[middle]<data){bottom=middle+1;}else if(fp[middle]>data){top=middle-1;}else{printf("经过%d次查找,查找到数据%d.\n",i,data);return;}}printf("经过%d次查找,未能查找到数据%d.\n",i,data);}void Sort(int *fp,int length){printf("现在开始为数组排序,排列结果将是从小到大.\n");int temp;for(int i=0;i<length;i++)for(int j=0;j<length-i-1;j++)if(fp[j]>fp[j+1]){temp=fp[j];fp[j]=fp[j+1];fp[j+1]=temp;}printf("排序完成!\n下面输出排序后的数组:\n");for(int k=0;k<length;k++){printf("%5d",fp[k]);}printf("\n");}struct hash{ int key;int si;};struct hash hlist[11];int i,adr,sum,d;void chash(int *arr,int n){ for(i=0;i<11;i++){ hlist[i].key=0;hlist[i].si=0;}for(i=0;i<n;i++){ sum=0;adr=(3*arr[i])%11;d=adr;if(hlist[adr].key==0){ hlist[adr].key=arr[i];hlist[adr].si=1;}else { do{d=(d+(arr[i]*7)%10+1)%11;sum=sum+1;}while(hlist[d].key!=0);hlist[d].key=arr[i];hlist[d].si=sum+1;}void dhash(int *arr,int n){ printf("哈希表显示为:");for(i=0;i<11;i++)printf("%4d",i); printf("\n");printf("哈希表关键字:");for(i=0;i<11;i++)printf("%4d",hlist[i].key);printf("\n");printf("查找长度是: ");for(i=0;i<11;i++)printf("%4d",hlist[i].si);printf("\n");average=0.0;for(i=0;i<11;i++)average=average+hlist[i].si;average=average/n;printf("平均长度:asl(%d)=%f\n",n,average); }void main(){int arr[LENGTH];ElemType item;char choice;BSTree root = NULL, ret; /* 必须赋予NULL值,否则出错*/BOOL finish = FALSE;printf("请输入你的数据的个数:\n");scanf("%d",&count);printf("请输入%d个数据\n",count);for(int i=0;i<count;i++){scanf("%d",&arr[i]);item=arr[i];if (-10000 != item)Insert(&root,item);}printf("当前已经生成的数列:\n");for( i=0;i<count;i++){printf("%d ",arr[i]);}printf("\n当前已经生成的二叉树:\n");showbitree(root);printf("\n\n");int choise=0;do{printf("\n1.使用顺序查询.\n2.使用二分查找法查找.\n3.利用二叉排序树查找.\n4.利用哈希表查找.\n5.退出\n");scanf("%d",&choise);if(choise==1)SequenceSearch(arr,count);else if(choise==2)Search(arr,count);else if(choise==3)searchtree(root);else if(choise==4){chash(arr,count);dhash(arr,count);}else if(choise==5)break;} while (choise==1||choise==2||choise==3||choise==4||choise==5);}输出和结果:当程序开始运行时,显示如下:当用户输入10并再次输入数据3 2 1 4 7 6 5 0 9 8 后,输出结果如下:当用户输入2,并输入3后,输出显示如下:当用户输入4后,输出的哈希表如下:当输入5后,程序结束。