查找算法的实现(C/C++实现)
时间:2022-05-07
本文章向大家介绍查找算法的实现(C/C++实现),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
存档:
1 #include <stdio.h>
2 #include <stdlib.h>
3 #define max 20
4 typedef int keytype;
5 #include "search.h"
6 int main()
7 {
8 sstable st;
9 keytype key;
10 int result,num;
11 init(st);
12 printf("***************************************n");
13 printf("1.顺序查找n");
14 printf("2.折半查找n");
15 printf("3.输出表信息n");
16 printf("4.退出n");
17 printf("***************************************n");
18 printf("请输入你的选择:n");
19 scanf("%d",&num);
20 while(1)
21 {
22 switch(num)
23 {
24 case 1:
25 printf("请创建顺序查找表");
26 create(st);
27 printf("请输入顺序查找的关键字:");
28 scanf("%d",&key);
29 result=search_seq(st,key);
30 if(result!=0)
31 printf("在顺序表里第%d个位置查找到了!n",result);
32 else
33 printf("在顺序表里没有找到!n");
34 break;
35 case 2:
36 printf("请创建递增的折半查找表n");
37 create(st);
38 printf("请输入折半查找的关键字:");
39 scanf("%d",&key);
40 result=search_bin(st,key);
41 if(result!=0)
42 printf("在顺序表里第%d个位置查找到了!n",result);
43 else
44 printf("在顺序表里没有找到!n");
45 break;
46 case 3:
47 print(st);
48 break;
49 case 4:
50 exit(0);
51 break;
52 default:printf("输入错误!n");
53 }
54 printf("n请重新输入您的选择:n");
55 scanf("%d",&num);
56 }
57 return 0;
58 }
1 typedef char infotype;
2 typedef struct
3 {
4 keytype key;//keytype为关键字的数据类型
5 infotype other;//其他数据
6 }elemtype;//数据元素类型
7 typedef struct
8 {
9 elemtype *r;//基地址
10 int length;//元素个数
11 }sstable;//静态查找表
12 int init(sstable &l)//初始化静态查找表,分配资源
13 {
14 l.r=new elemtype[max];
15 if(!l.r)
16 {
17 printf("初始化错误!n");
18 return 0;
19 }
20 l.length=0;
21 return 1;
22 }
23 void print(sstable l)//打印静态查找表的内容
24 {
25 for(int i=1;i<=l.length;i++)
26 printf("%d号关键字:%dn",i,l.r[i].key);
27 printf("元素个数:%dn",l.length);
28 }
29 int create(sstable &l)//创建表,对表中输入数据
30 {
31 l.length=0;
32 int k,i;
33 printf("请输入int型关键字,以-1结束:n");
34 scanf("%d",&k);
35 while(k!=-1)
36 {
37 l.r[l.length+1].key=k;//0号位置留空
38 l.length++;
39 if(l.length>=max)
40 return 0;
41 scanf("%d",&k);
42 }
43 printf("下标:");
44 for(i=1;i<=l.length;i++)
45 printf("%4d",i);
46 printf("n");
47 printf("key :");
48 for(i=1;i<=l.length;i++)
49 printf("%4d",l.r[i].key);
50 printf("n");
51 return 1;
52 }
53 int search_seq(sstable st,keytype key)//在顺序表ST中顺序查找其关键字等于key的数据元素
54 {
55 //若找到,则函数值为该元素在表中的位置,否则为0
56 st.r[0].key=key;
57 for(int i=st.length;i>=1;i--)//从后往前找
58 {
59 if(st.r[i].key==key)
60 {
61 return i;
62 }
63 }
64 return 0;
65 }
66 int search_bin(sstable st,int key)//在有序表ST中折半查找其关键字等于key的数据元素
67 {
68 //若找到,则函数值为该元素在表中的位置,否则为0
69 int low=1;
70 int high=st.length;
71 int mid;
72 while(low<=high)
73 {
74 mid=(low+high)/2;
75 printf("折半查找的low值%d、high值%d、mid值%dn",low,high,mid);
76 if(key==st.r[mid].key)
77 return mid;
78 else if(key<st.r[mid].key)
79 high=mid-1;
80 else
81 low=mid+1;
82 }
83 return 0;//表中不存在待查元素
84 }
运行结果如下:
- .NET 4 System.Threading.CountdownEvent
- java与ruby的直观比较
- 每天一个Linux命令:chmod
- SparkSql 中外连接查询中的谓词下推规则
- Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T>
- Python进行数据可视化分析快速教程实例
- 一个抓取豆瓣图书的开源爬虫的详细步骤
- Java 8 Stream 教程 (三)
- silverlight ListBox 多列图片效果
- ZooKeeper构建分布式锁(选译)
- Caliburn.Micro学习笔记(二)----Actions
- 每天一个Linux命令:find
- textFile构建RDD的分区及compute计算策略
- 一个基于Flask和MongoDB的CMS内容管理系统
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS7.2安装Nginx的方法步骤
- CentOS安装Python2.7与Python2.6并存的方法
- 详解Centos下YUM安装PHP的两种方式
- linux下make命令实现输出高亮的方法
- Ubuntu彻底卸载MySQL、Apache2和Php的方法教程
- linux下如何创建守护进程的步骤
- ubuntu系统中/etc/rc.local和/etc/init.d/rc.local的区别详解
- centos6.8下hadoop3.1.1完全分布式安装指南(推荐)
- 批处理模式下运行 top 命令的方法
- 关于CentOs系统自带python和yum卸载后的解决办法
- Linux sftp命令用法总结
- CentOS 7中搭建NFS文件共享存储服务的完整步骤
- centos 7中添加一个新用户并授权的步骤详解
- Linux下Apache HTTP Server 2.4.26安装教程
- 详解linux下查看系统版本号信息的方法(总结)