查找算法的实现(C/C++实现)
存档:
#include <stdio.h>
#include <stdlib.h>
#define max 20
typedef int keytype;
#include "search.h"
int main()
{
sstable st;
keytype key;
int result,num;
init(st);
printf("***************************************\n");
printf("1.顺序查找\n");
printf("2.折半查找\n");
printf("3.输出表信息\n");
printf("4.退出\n");
printf("***************************************\n");
printf("请输入你的选择:\n");
scanf("%d",&num);
while()
{
switch(num)
{
case :
printf("请创建顺序查找表");
create(st);
printf("请输入顺序查找的关键字:");
scanf("%d",&key);
result=search_seq(st,key);
if(result!=)
printf("在顺序表里第%d个位置查找到了!\n",result);
else
printf("在顺序表里没有找到!\n");
break;
case :
printf("请创建递增的折半查找表\n");
create(st);
printf("请输入折半查找的关键字:");
scanf("%d",&key);
result=search_bin(st,key);
if(result!=)
printf("在顺序表里第%d个位置查找到了!\n",result);
else
printf("在顺序表里没有找到!\n");
break;
case :
print(st);
break;
case :
exit();
break;
default:printf("输入错误!\n");
}
printf("\n请重新输入您的选择:\n");
scanf("%d",&num);
}
return ;
}
typedef char infotype;
typedef struct
{
keytype key;//keytype为关键字的数据类型
infotype other;//其他数据
}elemtype;//数据元素类型
typedef struct
{
elemtype *r;//基地址
int length;//元素个数
}sstable;//静态查找表
int init(sstable &l)//初始化静态查找表,分配资源
{
l.r=new elemtype[max];
if(!l.r)
{
printf("初始化错误!\n");
return ;
}
l.length=;
return ;
}
void print(sstable l)//打印静态查找表的内容
{
for(int i=;i<=l.length;i++)
printf("%d号关键字:%d\n",i,l.r[i].key);
printf("元素个数:%d\n",l.length);
}
int create(sstable &l)//创建表,对表中输入数据
{
l.length=;
int k,i;
printf("请输入int型关键字,以-1结束:\n");
scanf("%d",&k);
while(k!=-)
{
l.r[l.length+].key=k;//0号位置留空
l.length++;
if(l.length>=max)
return ;
scanf("%d",&k);
}
printf("下标:");
for(i=;i<=l.length;i++)
printf("%4d",i);
printf("\n");
printf("key :");
for(i=;i<=l.length;i++)
printf("%4d",l.r[i].key);
printf("\n");
return ;
}
int search_seq(sstable st,keytype key)//在顺序表ST中顺序查找其关键字等于key的数据元素
{
//若找到,则函数值为该元素在表中的位置,否则为0
st.r[].key=key;
for(int i=st.length;i>=;i--)//从后往前找
{
if(st.r[i].key==key)
{
return i;
}
}
return ;
}
int search_bin(sstable st,int key)//在有序表ST中折半查找其关键字等于key的数据元素
{
//若找到,则函数值为该元素在表中的位置,否则为0
int low=;
int high=st.length;
int mid;
while(low<=high)
{
mid=(low+high)/;
printf("折半查找的low值%d、high值%d、mid值%d\n",low,high,mid);
if(key==st.r[mid].key)
return mid;
else if(key<st.r[mid].key)
high=mid-;
else
low=mid+;
}
return ;//表中不存在待查元素
}
运行结果如下:
查找算法的实现(C/C++实现)的更多相关文章
- python查找算法的实现-二分法
1.算法:(设查找的数组期间为array[low, high]) (1)确定该期间的中间位置K(2)将查找的值T与array[k]比较.若相等,查找成功返回此位置:否则确定新的查找区域,继续二分查找. ...
- Boyer-Moore字符串查找算法的实现
前段时间在园子里看到一篇讲Boyer-Moore算法原理的文章http://kb.cnblogs.com/page/176945/,写的很详细,于是在这里自己写个C语言的实现,权当是练手吧. 基本思路 ...
- Go语言 二分查找算法的实现
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,二分查找算法的前提是传入的序列是有序的(降序或升序),并且有一个目标值. 二分查找的核心思想是将 n 个元素分成大 ...
- Bug2算法的实现(RobotBASIC环境中仿真)
移动机器人智能的一个重要标志就是自主导航,而实现机器人自主导航有个基本要求--避障.之前简单介绍过Bug避障算法,但仅仅了解大致理论而不亲自动手实现一遍很难有深刻的印象,只能说似懂非懂.我不是天才,不 ...
- Canny边缘检测算法的实现
图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.由于数字图像的离散信号, ...
- Alink漫谈(六) : TF-IDF算法的实现
Alink漫谈(六) : TF-IDF算法的实现 目录 Alink漫谈(六) : TF-IDF算法的实现 0x00 摘要 0x01 TF-IDF 1.1 原理 1.2 计算方法 0x02 Alink示 ...
- 图像数据到网格数据-2——改进的SMC算法的实现
概要 本篇接上一篇继续介绍网格生成算法,同时不少内容继承自上篇.上篇介绍了经典的三维图像网格生成算法MarchingCubes,并且基于其思想和三角形表实现了对样例数据的网格构建.本篇继续探讨网格生成 ...
- java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现
java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...
- SSE图像算法优化系列十三:超高速BoxBlur算法的实现和优化(Opencv的速度的五倍)
在SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现) 一文中,我曾经说过优化后的ExpBlur比BoxBlur还要快,那个时候我比较的BoxBlur ...
随机推荐
- spring cloud sidecar
用spring cloud sidecar的整合异构语言,以前做过没有做笔记,现在再做由于各种坑又浪费了一天,这里记一下 首先是官网:http://cloud.spring.io/spring-clo ...
- Spring框架(三) JDBCTemplate,声明式事务,自动装载(注解)
JDBCTemplate 按照标准正常项目的结构 结构图: model层 dao层 实现 dao:(DateBase Access Object) 数据访问对象,dao层只用来访问数据库和模型层 s ...
- KVM 初探
KVM 是业界最为流行的 Hypervisor,全称是 Kernel-based Virtual Machine.它是作为 Linux kernel 中的一个内核模块而存在,模块名为 kvm.ko,也 ...
- 浅谈传统语音通信和APP语音通信音频软件开发之不同点
本人在传统的语音通信公司做过手机和IP电话上的语音软件开发,也在移动互联网公司做过APP上的语音软件开发.现在带实时语音通信功能的APP有好多,主流的有微信语音.QQ电话.钉钉等,当然也包括我开发过的 ...
- ArcGIS API for JavaScript 4.2学习笔记[18] 搜索小部件
这个例子很简单,作为开学后(暴露出学生党的本质)的开胃菜是再合适不过了. 不过,博主提前警告一下:接下来的例子会相当的长.烦.难.我还会用"引用"-"函数参数骨架&quo ...
- UVALive 3716 DNA Regions
题目大意:给定两个长度相等的字符串A和B,与一个百分比p%,求最长的.失配不超过p%的区间长度.O(nlogn). 题目比较简单套路,推推式子就好了. 记S[i]表示到下标i一共有多少个失配,就相当于 ...
- bzoj 4539: [Hnoi2016]树
Description 小A想做一棵很大的树,但是他手上的材料有限,只好用点小技巧了.开始,小A只有一棵结点数为N的树,结 点的编号为1,2,-,N,其中结点1为根:我们称这颗树为模板树.小A决定通过 ...
- HBase0.98使用ReplicationAdmin管理集群同步
公司datalink平台负责从各种数据源读取数据并同步到其他的同步或者异构数据源,最近增加的HBase的reader利用到了Hbase的Replication特性. 正常情况下,我们配置HBase的R ...
- Linux第三节整理 、增删改查、用户管理
帮助+基本文件管理+用户管理 1.怎么查看命令帮助 ls --help man ls :查看命令/man 5 file:查看配置文件 2.基本文件管理,通过{查,建,删,改} 四个维度介绍了不同的命令 ...
- Python列表list对象方法总结