查找算法的实现(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 ...
随机推荐
- CentOS ifconfig无IP地址解决办法
修改/etc/sysconfig/network-scripts/ifcfg-ens33 把 ONBOOT 改为 yes,重启后就会有ip,且物理机和虚拟机可以互相ping通了.
- 伪列:Oracle显示查询结果前几条记录用rownum<=。去掉重复记录,保留最早录入记录:取出最小ROWID
显示6-10行记录: 去掉重复记录,保留最早录入记录:取出最小ROWID SELECT deptno,dname,loc,min(ROWID) FROM dept GROUP BY deptno,dn ...
- Oracle数据库(一)概述、基础与简单操作
数据库: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 数据库分类: 关系型数据库 非关系型数据库 数据库 类型 特性 优点 缺点 关系型数据库 SQLite.Oracle. ...
- 为了CET-4!(二)
directions: For this part,you are allowed 30 minutes to write an eassay.Suppose there are two option ...
- Java定时器应用
在Java多线程中,有的时候,我们需要按照指定间隔时间来执行一些任务,这时,我们就要用到定时器.我们在这里以Java中的Timer定时器为例,演示定时器的应用. 请看下述代码: import java ...
- MySQL 如何执行关联查询
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/51 当前mysql执行的策略很简单:mysql对任何关联都执行嵌 ...
- 仿知乎app登录界面(Material Design设计框架拿来就用的TexnInputLayout)
在我脑子里还没有Material Design这种概念,就我个人而言,PC端应用扁平化设计必须成为首选,手当其冲的两款即时通讯旺旺和QQ早就完成UI扁平化的更新,然而客户端扁平化的设计本身就存在天生的 ...
- C#中Abstract和Virtual[转载]
原文:http://www.cnblogs.com/blsong/archive/2010/08/12/1798064.html 在C#的学习中,容易混淆virtual方法和abstract方法的使用 ...
- Linux第五节随笔 /file / vim / suid /sgid sbit
三期第四讲1.查询文件类型与文件位置命令 file 作用:查看文件类型(linux下的文件类型不以后缀名区分) 语法举例: [root@web01 ~]# file passwd passwd: AS ...
- glibc-commons 依赖解析 版本错误,xxx is duplicate yyy
glibc-commons 安装了两个版本,导致依赖glibc-commons的很多软件包 被安装了两个版本: 解决办法就是 先清除这些重复的已安装的软件,然后执行 yum update 将 glib ...