查找算法的实现(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 ...
随机推荐
- node作为客户端请求第三方
var http = require('http'); let util = require('util'); http.get('http://www.imooc.com/u/card',funct ...
- [array] leetcode-56. Merge Intervals - Medium
leetcode-56. Merge Intervals - Medium descrition Given a collection of intervals, merge all overlapp ...
- bzoj 3932: [CQOI2015]任务查询系统
Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...
- StreamCQL编写jstorm拓扑任务入门
一,什么是 StreamCQL StreamCQL(Stream Continuous Query Language)是一个类似SQL的声明式语言, 目的是在流计算平台(目前也就是jstrom)的基础 ...
- Python学习(一):编写购物车
1.购物车流程图: 2.代码实现: #!/usr/bin/env python #coding=utf-8 ChoiceOne =''' 1.查看余额 2.购物 3.退出 ''' ChoiceTwo ...
- eKing Cloud基础云平台演进之路
出口转内销.首发于公司微信公众号,作者本人,现转载到此.本来写得比较技术,还算有点干货,但是结果被编辑咔咔咔,就只剩下下面这些内容. 大型企业如何开启自己的快速上云之路? 2017-12-08 易建科 ...
- 7、树莓派编程;gpio编程;led闪烁
本博文仅作本人操作过程的记录,留作备忘.自强不息 QQ12226981 1.树莓派接口对照,一定要找到对应的引脚,不要接错了.我画上箭头. 2.安装 下载地址,https://git.drogon.n ...
- ActiveMQ (二) 常用配置简介
ActiveMQ的主要配置文件 ActiveMQ的一些常用的属性很多可以在对应的配置文件中进行配置的.比如访问web console的管理端的端口,用户名密码,连接MQ时的用户名和密码,持久化设置,是 ...
- Java NIO (五) 管道 (Pipe)
Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 如下图: 向管道写数据: 从管道读数据: 1. ...
- JMeter集合点
位置:添加--> 定时器-->Synchronizing Timer 注意:集合点放在所有操作之前. 假设线程组线程数设置的是50个,那么希望50个都准备好一块上,那么集合点中 ...