2、蛤蟆的数据结构进阶二静态查询之顺序查询

2、蛤蟆的数据结构进阶二静态查询之顺序查询

本篇名言:“我从不把安逸和快乐看作是生活的本身 --这种伦理基础,我叫它猪栏的理想。 --爱因斯坦”

这篇我们来看下静态查询中的顺序表查询。

我们先来看下概念,然后是代码实现。

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47175103

1.  查找

在计算机科学中定义为:在一些(有序的/无序的)数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程叫做查找。也就是根据给定的某个值,在查找表中确定一个关键字等于给定值的记录或数据元素。

查找表:用于查找的数据元素集合称为查找表。查找表由同一类型的数据元素(或记录)构成。静态查找表 若只对查找表进行如下两种操作:(1)在查找表中查看某个特定的数据元素是否在查找表中,(2)检索某个特定元素的各种属性,则称这类查找表为静态查找表。静态查找表在查找过程中查找表本身不发生变化。对静态查找表进行的查找操作称为静态查找。

动态查找表:若在查找过程中可以将查找表中不存在的数据元素插入,或者从查找表中删除某个数据元素,则称这类查找表为动态查找表。动态查找表在查找过程中查找表可能会发生变化。对动态查找表进行的查找操作称为动态查找。

静态查找表技术:顺序查找、折半查找、索引顺序查找

2.  查找算法的衡量指标

在查找一个记录时所做的主要操作是关键字的比较,所以通常把查找过程中对关键字的平均比较次数作为衡量一个查找算法效率优劣的标准,并称平均比较次数为平均查找长度(AverageSearch Length)。平均查找长度的定义为:

ASL=

其中,n为元素的个数; ci是查找第i 个记录需进行的比较次数;pi是查找第i个记录的概率,一般可认为查找每个记录的概率是相等的,即p1=p2=…=pn=1/n。

3.  顺序查找

顺序查找的思想是:将查找值顺序逐个与结点值进行比较,相等即为查找成功,否则查找失败.

顺序查找是一种最简单的查找方法。其基本思想是将查找表作为一个线性表,可以是顺序表,也可以是链表,依次用查找条件中给定的值与查找表中数据元素的关键字值进行比较,若某个记录的关键字值与给定值相等,则查找成功,返回该记录的存储位置,反之,若直到最后一个记录,其关键字值与给定值均不相等,则查找失败,返回查找失败标志。

在顺序查找中,比较次数ci取决于所查记录在表中的位置。如查找记录R[n]时,仅需比较一次,而查找记录R[1]时,则需比较n次。一般来说,查找第i个记录的比较次数为ci=n-i+1,因此,查找成功的平均查找长度为如下图2

在等概率情况下,即pi=1/n时,查找成功的平均查找长度为(n+1)/2。若关键字不在表中,则必须经过n+1次比较后才能确定查找失败。所以查找失败的平均查找长度为n+1。这个结果表明:顺序查找的查找长度是与记录的个数n成正比的。

4.  代码实现

顺序表或线性表表示静态查找表,都可以用顺序查找来实现。

此处我们也采用顺序表。

4.1         Main

输入表的个数,然后调用CreateLowShao来创建表,然后调用shuchu输出表中的数。

接着输入要查找的元素。最后调用Search_DiShao输出要查找的元素。

如下图3

4.2         CreatLowShao

根据表中总数量,挨个输入表的数据。最后设置表的总数。

4.3         shuchu

输出表中的数。

4.4         Search_DiShao

从表中寻找是否存在该数,存在则输出。

5.  源码

#include<stdio.h>

#include<stdlib.h>

typedefstruct

{

int*elem;

intlength;

}SSTable;

void CreatLowShao(SSTable&ST,intn)

{

inta;

ST.elem=(int*)malloc((n+2)*sizeof(int));

if(!ST.elem)exit(0);

printf("请输入所创建的表的数据:");

for(inti=1;i<n+1;i++)

{

scanf("%d",&a);

ST.elem[i]=a;

}

ST.length=n;

}

void CreatGaoShao(SSTable&ST,intn)

{

inta;

ST.elem=(int*)malloc((n+1)*sizeof(int));

if(!ST.elem)exit(0);

printf("请输入所创建的表的数据:");

for(inti=0;i<n;i++)

{

scanf("%d",&a);

ST.elem[i]=a;

}

ST.length=n;

}

void shuchu(SSTable&ST)

{

printf("建立的表为:");

for(inti=1;i<=ST.length;i++)

{

printf("%5d",ST.elem[i]);

}

printf("\n");

}

int Search_DiShao(SSTable&ST,intkey)

{

ST.elem[0]=key;

for(inti=ST.length;i>=0;i--)

{

if(ST.elem[i]==key)

returni;

}

}

int Search_GaoShao(SSTable&ST,intkey)

{

ST.elem[ST.length+1]=key;

for(inti=1;i<=ST.length+1;i++)

{

if(ST.elem[i]==key);

returni;

}

}

void main()

{

inti,n,key;

SSTableST;

printf("请输入所建立表元素的个数:");

scanf("%d",&n);

CreatLowShao(ST,n);

shuchu(ST);

printf("请输入要查找的元素:");

scanf("%d",&key);

i=Search_DiShao(ST,key);

printf("元素所在位置为:%d\n",i);

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-24 13:28:03

2、蛤蟆的数据结构进阶二静态查询之顺序查询的相关文章

3. 蛤蟆的数据结构进阶三静态查询之折半查询

3. 蛤蟆的数据结构进阶三静态查询之折半查询 本篇名言:"但是话不行,要紧的是做. --鲁迅" 继续来看静态查询的折半查询. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47211637 1.  折半查找 折半查找要求查找表用顺序存储结构存放且各数据元素按关键字有序(升序或隆序)排列,也就是说折半查找只适用于对有序顺序表进行查找. 折半查找的基本思想是:首先以整个查找表作为查找范围,用查找条件中给定值k与中间位置

4. 蛤蟆的数据结构进阶四静态查询之索引顺序查询

4. 蛤蟆的数据结构进阶四静态查询之索引顺序查询 本篇名言:"凡是新的事情在起头总是这样一来的,起初热心的人很多,而不久就冷淡下去,撒手不做了,因为他已经明白,不经过一番苦工是做不成的,而只有想做的人,才忍得过这番痛苦. --陀思妥也夫斯基" 我们继续静态查询的索引顺序查询. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47264703 1.  索引顺序查询 首先把表长为n的线性表分成b块,前b-1块记录个数为s

5. 蛤蟆的数据结构进阶五动态查询

5. 蛤蟆的数据结构进阶五动态查询 本篇名言:"判断一个人,不是根据他自己的表白或对自己的看法,而是根据他的行动. --列宁" OK,我们接下去来看下动态查询. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47284473 1.  动态查找表 动态查找表:若在查找过程中可以将查找表中不存在的数据元素插入,或者从查找表中删除某个数据元素,则称这类查找表为动态查找表.动态查找表在查找过程中查找表可能会发生变化.对动态

12. 蛤蟆的数据结构进阶十二排序实现之直接插入法

12. 蛤蟆的数据结构进阶十二排序实现之直接插入法 本篇名言:"路是脚踏出来的 ,历史是人写出来的,人的每一步行动都在书定自己的历史. --吉鸿昌" 接下来看下直接插入法的实现. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47687631 1.  直接插入法 直接插入排序(straightinsertion sort) 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序. 第一趟比较前两

17. 蛤蟆的数据结构进阶十七排序实现之归并排序

17. 蛤蟆的数据结构进阶十七排序实现之归并排序 本篇名言:"人生不是一种享乐 ,而是一桩十分沉重的工作.-- 列夫 . 托尔斯泰" 我们来看下归并排序. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47790163 1.  归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个

6. 蛤蟆的数据结构进阶六之二叉树排序树

6. 蛤蟆的数据结构进阶六之二叉树排序树 本篇名言:"有些人因为贪婪,想得更多的东西,却把现在所有的也失掉了. -- 伊索" 关于理论知识已经在上篇中进行描述,这篇我们主要来看下如何是实现二叉排序树. 欢迎转载,转载请标明出处: 1.  二叉排序树的定义 二叉排序树(BinarySort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: ①若它的左子树非空,则左子树上所有结点的值均小于根结点的值: ②

7. 蛤蟆的数据结构进阶七平衡二叉树

7. 蛤蟆的数据结构进阶七平衡二叉树 本地名言:"金钱的贪求(这个毛病,目前我们大家都犯得很凶)和享乐的贪求,促使我们成为它们的奴隶,也可以说,把我们整个身心投入深渊.唯利是图,是一种痼疾,使人卑鄙,但贪求享乐,更是一种使人极端无耻,不可救药的毛病. --郎加纳斯" 我们来看下传说中的平衡二叉树,为什么说他传说中呢?因为蛤蟆接触ORACLE数据库比较多,而ORACLE数据中用到最多的索引就是平衡二叉树,所以嘛. 欢迎转载,转载请标明出处:http://write.blog.csdn.n

8. 蛤蟆的数据结构进阶八哈希表相关概念

8. 蛤蟆的数据结构进阶八哈希表相关概念 本篇名言:"作家当然必须挣钱才能生活,写作,但是他决不应该为了挣钱而生活,写作.--马克思" 前些笔记我们学习了二叉树相关.现在我们来看下哈希表.这篇先来看下哈希表的相关概念 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47347273 1.  哈希表的概念 哈希表(HashTable)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构.它通过把关键

19. 蛤蟆的数据结构进阶十九外部排序相关概念

19. 蛤蟆的数据结构进阶十九外部排序相关概念 本篇名言:"一个人最怕不老实,青年人最可贵的是老实作风. "老实 " 就是不自欺欺人,做到不欺骗人家容易,不欺骗自己最难. "老实作风 " 就是脚踏实地,不占便宜.世界上没有便宜的事,谁想占便宜水就会吃亏. --徐特立" 之前我们学习的排序都是内部排序的,接下去来看下外部排序. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47