数据结构:实验七:数据查找

一、    实验目的

(1)领会各种查找算法的过程和算法设计。

(2)掌握查找算法解决实际问题。

二、  实验要求

(1)编写一个程序exp8-1.cpp, 按提示输入10个任意的整形数据(无序),再输入一个待查找的数据,采用顺序查找方法,如果查找成功,返回该数据所在的位置(逻辑序号)。 如果查找不成功,给出一定的提示。

(2)编写一个程序exp8-2.cpp,输出在顺序表(1,2,3,4,5,6,7,8,9,10)中采用折半查找方法查找关键字9的过程。

三、实验环境

Windows+DEV C++( 或者其他编译工具)

四、实验步骤及结果 

1.类型声明

(1)

顺序查找(无序):

typedef int KeyType;//定义关键字类型为inttypedef char InfoType[10];typedef struct {KeyType Key;//关键字项InfoType data;//其他数据项,类型为InfoType} NodeType; //查找元素类型typedef NodeType SeqList[MAXSIZE];

(2)

折半查找(递归):

typedef int KeyType;//定义关键字类型为inttypedef char InfoType[10];typedef struct {KeyType key;//关键字项InfoType data;//其他数据项,类型为InfoType} NodeType; //查找元素类型typedef NodeType SeqList[MAXL];//顺序表类型

2.各类查找算法的实现

(1)

顺序查找(无序):

int Search(SeqList R,int n,KeyType k) {int i=0;while(i<n&&R[i].Key!=k) {i++;}if(i>=n)return -1;elsereturn i;}

(2)

折半查找(递归):

int  BinSearch(SeqList R,KeyType k,int low,int high,int count)//折半查找算法(递归){int mid;if(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;else if(R[mid].key>k) //继续在R[low...mid-1]中查找BinSearch(R,k,low,mid-1,count);elseBinSearch(R,k,mid+1,high,count);//继续在R[mid+1...high]中查找}else return -1;}

3.主程序设计及完成实验要求中的功能

(1)

顺序查找(无序):

int main() {SeqList R;int n=10;KeyType k = 9;printf("输入序列内容(十个不同整型数字):");int i;for(i=0;i<10;i++){scanf("%d",&R[i].Key);}printf("序列为:");for(i=0;i<n;i++){printf("%d,",R[i].Key);}printf("\n请输入需要查找的数字为:");scanf("%d",&k);printf("需要搜索的数字为%d",k);if((i =Search(R,n,k))!=-1)printf("\n%d在序列的第%d位置",k,i);elseprintf("\n元素%d不在序列中\n",k);printf("\n");}

(2)

折半查找(递归):

int main(){SeqList R;int i;int n=10;KeyType k = 9;int a[]={1,2,3,4,5,6,7,8,9,10};for(i=0;i<n;i++)//建立顺序表R[i].key=a[i];printf("用递归方法:\n");if((i =BinSearch(R,k,0,9,0))!=-1)printf("元素%d的位置是%d\n",k,i);elseprintf("元素%d不在表中\n",k);}

exp8-1:

#include <stdio.h>
#define MAXSIZE 100
typedef int KeyType;//定义关键字类型为int
typedef char InfoType[10];
typedef struct {KeyType Key;//关键字项InfoType data;//其他数据项,类型为InfoType
} NodeType; //查找元素类型
typedef NodeType SeqList[MAXSIZE];
int Search(SeqList R,int n,KeyType k) {int i=0;while(i<n&&R[i].Key!=k) {i++;}if(i>=n)return -1;elsereturn i;
}
int main() {SeqList R;int n=10;KeyType k = 9;printf("输入序列内容(十个不同整型数字):");int i;for(i=0;i<10;i++){scanf("%d",&R[i].Key);}printf("序列为:");for(i=0;i<n;i++){printf("%d,",R[i].Key);}printf("\n请输入需要查找的数字为:");scanf("%d",&k);printf("需要搜索的数字为%d",k);if((i =Search(R,n,k))!=-1)printf("\n%d在序列的第%d位置",k,i);elseprintf("\n元素%d不在序列中\n",k);printf("\n");
}

exp8-2:

#include <stdio.h>
#define MAXL 100
typedef int KeyType;//定义关键字类型为int 
typedef char InfoType[10];
typedef struct {KeyType key;//关键字项InfoType data;//其他数据项,类型为InfoType
} NodeType; //查找元素类型
typedef NodeType SeqList[MAXL];//顺序表类型 
int  BinSearch(SeqList R,KeyType k,int low,int high,int count)//折半查找算法(递归)
{int mid; if(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;else if(R[mid].key>k) //继续在R[low...mid-1]中查找BinSearch(R,k,low,mid-1,count); elseBinSearch(R,k,mid+1,high,count);//继续在R[mid+1...high]中查找}else return -1;
}
int main()
{SeqList R;int i;int n=10;KeyType k = 9;int a[]={1,2,3,4,5,6,7,8,9,10};for(i=0;i<n;i++)//建立顺序表R[i].key=a[i];printf("用递归方法:\n"); if((i =BinSearch(R,k,0,9,0))!=-1)printf("元素%d的位置是%d\n",k,i);elseprintf("元素%d不在表中\n",k);
}

4.实验结果截图

(1)

顺序查找(无序):

(2)

折半查找(递归):

如需源文件,请私信作者,无偿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/661636.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

283. 移动零 11. 盛最多水的容器

283. 移动零 把非零的数全交换到前面去 11. 盛最多水的容器 双指针&#xff1a; 双指针一个在头 一个在尾部 计算两个边的盛水量并更新数值 左右两边 哪边矮就移动哪边

【大模型学习】Transformer(学习笔记)

Transformer介绍 word2vec Word2Vec是一种用于将词语映射到连续向量空间的技术&#xff0c;它是由Google的Tomas Mikolov等人开发的。Word2Vec模型通过学习大量文本数据中的词语上下文信息&#xff0c;将每个词语表示为高维空间中的向量。在这个向量空间中&#xff0c;具有相似…

C++ | Leetcode C++题解之第59题螺旋矩阵II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> generateMatrix(int n) {int num 1;vector<vector<int>> matrix(n, vector<int>(n));int left 0, right n - 1, top 0, bottom n - 1;while (left < r…

YOLOV8 pycharm

1 下载pycharm 社区版 https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows 2 安装 3 新建 4 选择 文件-> setting 配置环境变量 5 添加conda 环境

DigitalOcean 托管 Kafka 新增横向扩展功能

自2023年9月推出以来&#xff0c;DigitalOcean托管的Kafka已经使初创公司、不断增长的数字业务以及独立软件供应商(ISV)能够改善实时数据处理和分析&#xff0c;从而做出更具洞察力的决策。在新的一年里&#xff0c;我们很高兴地宣布DigitalOcean托管Kafka的横向扩展功能&#…

TDengine写入2000万数据查询体验

最近在寻找时序数据库&#xff0c;想应用在公司的项目上。 上一篇文章实验了InfluxDB:windows上使用influx2.7学习,还学习了flux语言&#xff0c;最后发现宽表查询比较困难&#xff0c;就放弃了&#xff0c;于是决定试试国产时序数据库TDengine 参考 官方文档&#xff1a;htt…

C语言异步编程

回调函数在异步编程中有着重要的作用&#xff0c;在接口编程应用广泛&#xff0c;实战中经常会注册一个回调函数来接收其他程序返回的数据&#xff0c;这样做的好处是调用者无需主动去获取被调用者的数据&#xff0c;仅仅需要回调&#xff0c;让被调用者去传送数据&#xff0c;…

群晖Docker部署Java jar包

安装群晖Docker组件Container Manager 打开组件,找到注册表搜索java,安装java映像 安装完成后会在映像目录里展示出来,点击运行 常规设置按需配置即可 这里要设置一个文件夹目录给这个容器来使用 一般来说给个/root来用就够了 设置完成后可以在容器目录里看到容器已经运行起来了…

图论之最短路算法模板总结

来个大致的分类&#xff1a; 朴素的迪杰斯特拉&#xff1a; 实现&#xff1a; 我们让s表示当前已经确定的最短距离的点&#xff0c;我们找到一个不在s中的距离最近的点t&#xff0c;并用t来更新其他的点。 下面是AC代码&#xff1a; #include<bits/stdc.h> using nam…

Apache SeaTunnel k8s 集群模式 Zeta 引擎部署指南

SeaTunnel提供了一种运行Zeta引擎(cluster-mode)的方法&#xff0c;可以让Kubernetes在本地运行Zeta引擎&#xff0c;实现更高效的应用程序部署和管理。在本文中&#xff0c;我们将探索SeaTunnel k8s运行zeta引擎(cluster-mode模式)的更多信息&#xff0c;了解如何更好地利用Ze…

从正文开始计算并设置第x页,共x页

如下图&#xff0c;本人正文以下内容只有34页&#xff0c;但wps/word会自动计算全部的页数&#xff0c;看到网上有许多解决方法&#xff0c;但都太麻烦&#xff0c;下面教你两步解决所有问题。 第一步&#xff0c;手动更改第1页的共x页的x为自己需要的页数。 第二步&#xff0c…

【JavaWeb Day 2 - JS 】

JavaWeb Day 2 - JS JS背景故事1. JS 引入方式2. JS 基本语法2.2 变量2.3 数据类型2.4 运算符 3. JS 函数4. JS 对象4.1 Array对象4.2 String对象4.3 JSON对象4.4 BOM对象4.4.1 windows 对象4.4.2 location 对象 4.5 DOM 对象DOM 案例 5. JS 事件监听5.1 JS 事件绑定 及 常见事…