博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[数据结构]查找
阅读量:5999 次
发布时间:2019-06-20

本文共 964 字,大约阅读时间需要 3 分钟。

查找概念

查找表:由同一类型的数据元素构成的集合。

查找表按照操作的方式分为两大种:静态查找表和动态查找表。

静态查找表:只作查找操作的查找表,它的主要的操作有:

查找某个“特定的数据元素”

动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个数据元素。动态查找表的操作:

查找时插入数据和查找时删除数据

对于静态查找表来说,可以应用线性表结构来组织数据,这样可以使用顺序查找算法。如果再对主关键字排序,则可以应用折半查找等技术进行高效的查找。

对于动态查找,则要考虑二叉排序树的查找技术。

静态表查找

顺序表查找

顺序查找:从表中的第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,如果某个记录的关键字和给定值相等,则查找成功。如果直到最后一个(或第一个)记录,其关键字和给定值比较都不相等,则查找不成功。

int Sequential_Search(int *a, int n, int key){	int i;	for(i = 1; i <= n; i++)	{		if(a[i] == key)		{			return i;		}	}//for		return 0;}

但是这个算法是可以改进的,上面看到每向后移动一个元素后,都要比较当前的索引和数组的个数,防止越界。事实上,可以设置一个哨兵,这样就不需要每次让i与n作比较了。

/*有哨兵的顺序查找,查找成功返回下标,不成功返回0*/int Sequential_Search2(int *a, int n, int key){	int i = n;	a[0] = key;	//设置a[0]为关键字,称之为哨兵		while(a[i] != key)	{		i--;	}		return i;}

  这种在查找方向的尽头设置哨兵的方法,避免了在查找过程中每次比较后都要判断查找位置是否越界。在数据量较多时,效率提高很大,是非常好的编程技巧。

折半查找

有序表中,取中间记录作为比较对象,若给定值与中间记录相等,则查找成功。若给定值小于中间记录,则在中间记录的左半区继续查找;若给定值大于中间记录,则在右半区查找。

转载于:https://www.cnblogs.com/stemon/p/4477528.html

你可能感兴趣的文章
阿里巴巴「天猫超市事业群」2019校招启动!
查看>>
我来告诉你,一个草根程序员如何进入BAT
查看>>
腾讯领投,小鱼易连完成C轮融资
查看>>
小程序云应用入门实操系列课程第一讲 - 云应用的价值 ...
查看>>
Android性能调优;如何让你的APK瘦身88%
查看>>
MaxCompute_SQL_开发指南
查看>>
什么是Kubernetes,以及Orchestration如何重新定义数据中心 ...
查看>>
如何对RTSP播放器做功能和性能评估
查看>>
阿里云ECS连接数据库教程方法
查看>>
第二十二章:动画(十三)
查看>>
快速了解云计算
查看>>
【函数计算月报】2019年1月刊
查看>>
HashMap(JDK1.8)源码阅读记录
查看>>
ApiBoot - ApiBoot Http Converter 使用文档
查看>>
Android 蓝牙2.0的使用方法:
查看>>
linux 检查那个进程占用文件
查看>>
react
查看>>
原金立总裁卢伟冰加入小米,雷军发微博欢迎
查看>>
一对一直播源码成为下一个风口,但你知道它进展如何了吗?
查看>>
腾讯开源 Westore,1KB JS 覆盖状态管理与跨页通讯
查看>>