存档:

 #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++实现)的更多相关文章

  1. python查找算法的实现-二分法

    1.算法:(设查找的数组期间为array[low, high]) (1)确定该期间的中间位置K(2)将查找的值T与array[k]比较.若相等,查找成功返回此位置:否则确定新的查找区域,继续二分查找. ...

  2. Boyer-Moore字符串查找算法的实现

    前段时间在园子里看到一篇讲Boyer-Moore算法原理的文章http://kb.cnblogs.com/page/176945/,写的很详细,于是在这里自己写个C语言的实现,权当是练手吧. 基本思路 ...

  3. Go语言 二分查找算法的实现

    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,二分查找算法的前提是传入的序列是有序的(降序或升序),并且有一个目标值. 二分查找的核心思想是将 n 个元素分成大 ...

  4. Bug2算法的实现(RobotBASIC环境中仿真)

    移动机器人智能的一个重要标志就是自主导航,而实现机器人自主导航有个基本要求--避障.之前简单介绍过Bug避障算法,但仅仅了解大致理论而不亲自动手实现一遍很难有深刻的印象,只能说似懂非懂.我不是天才,不 ...

  5. Canny边缘检测算法的实现

    图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波.我们知道微分运算是求信号的变化率,具有加强高频分量的作用.在空域运算中来说,对图像的锐化就是计算微分.由于数字图像的离散信号, ...

  6. Alink漫谈(六) : TF-IDF算法的实现

    Alink漫谈(六) : TF-IDF算法的实现 目录 Alink漫谈(六) : TF-IDF算法的实现 0x00 摘要 0x01 TF-IDF 1.1 原理 1.2 计算方法 0x02 Alink示 ...

  7. 图像数据到网格数据-2——改进的SMC算法的实现

    概要 本篇接上一篇继续介绍网格生成算法,同时不少内容继承自上篇.上篇介绍了经典的三维图像网格生成算法MarchingCubes,并且基于其思想和三角形表实现了对样例数据的网格构建.本篇继续探讨网格生成 ...

  8. java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现

    java基础解析系列(四)---LinkedHashMap的原理及LRU算法的实现 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析 ...

  9. SSE图像算法优化系列十三:超高速BoxBlur算法的实现和优化(Opencv的速度的五倍)

    在SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现) 一文中,我曾经说过优化后的ExpBlur比BoxBlur还要快,那个时候我比较的BoxBlur ...

随机推荐

  1. 非常有用的GitHub链接

    平常开发工作中,我经常取Github上搜索项目,Clone下来学习使用,在这个过程中,发现了好多比较好的Github地址,记录下来,分享出去. image 非常有用的GitHub链接(顺序不分先后): ...

  2. 写给自己的web总结——关于html的知识总结

    相信每个前端工程师初识前端之时,最先接触的都是html吧! html的全称是hyperText markup language, 超文本标记语言,在网页中所有的文字,图片,架构等都是由html来编写的 ...

  3. Eclipse 问题整理

    新建servlet报错,提示找不到javax.servlet包 解决的方法:把tomcat安装包里的lib目录下的servlet-api.jar拷贝一份到工程文件夹下的web目录下的WEB-INF目录 ...

  4. lesson - 10 shell 基础知识

    课程大纲: 1. shell特性 命令历史 history !!  !$  !n  !字符 Tab 键可以补全文件路径或者命令 alias  a=“b”  unalias a 通配符 *匹配零个或多个 ...

  5. Python连接webstocker获取消息

    简介(脚本都是根据网上资料改写) 此脚本主要是客户觉得webstcket不稳定,所以编辑一个脚本,不停的请求web服务器,当发生错误时,脚本自动退出(). 脚本内容 脚本一 # -*- coding: ...

  6. windows 命令行打开浏览器

    在命令行打开百度 start chrome www.baidu.com

  7. MySQL: Integer & String types

    Type Storage(bytes) Minimum Value Maximum Value TINYINT 1 -128/0 127/255 SMALLINT 2 -23768/0 23767/6 ...

  8. Linux 文本编辑器vi命令

    1.Vim Vim  是一个功能强大的全屏幕文本编辑器,是 Linux/UNIX 上最常用的文本编辑器,它的作用是建立.编辑.显示文本文件. Vim 没有菜单,只有命令 2.Vim 工作模式 3.插入 ...

  9. 关于java字节流的read()方法返回值为int的思考

    我们都知道java中io操作分为字节流和字符流,对于字节流,顾名思义是按字节的方式读取数据,所以我们常用字节流来读取二进制流(如图片,音乐 等文件).问题是为什么字节流中定义的read()方法返回值为 ...

  10. windows安装ipython的困难重重

    本机环境 系统: windows 10 64位 python版本:3.2.1 安装过程 安装ipython可以使用python的pip工具 pip install ipython 在使用pip前,我准 ...