文字描述

  顺序查找的查找过程为:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录;反之,若直至第一个记录,其关键字和给定值比较都不等,则表明表中没有所查记录,查找不成功。

示意图

算法分析

  从顺序查找的过程看,Ci取决于所查记录在表中的位置。如:查找表中最后一个记录时,仅需比较一次,Ci为1;而查找表中第一个记录时,需比较n次,Ci为n。一般情况下Ci等于n-i+1。

  假设每个记录的查找概率相等,且每次都能查找成功,则平均查找长度为:

  (1/n) * [n(n+1)/2] = (n+1)/2

  假设考虑查找不成功的可能性,每个记录的查找概率也相等,则平均查找长度为:

  (1/2n) * [n(n+1)/2] + (1/2n)*n*(n+1) = [3*(n+1)]/4

代码实现

 #include <stdio.h>
#include <stdlib.h> #define EQ(a, b) ((a) == (b))
#define LT(a, b) ((a) < (b))
#define LQ(a, b) ((a) <= (b))
#define MAX_SIZE 50
#define DEBUG typedef int KeyType;
typedef char InfoType;
/*数据元素类型定义*/
typedef struct{
//关键字域
KeyType key;
//其他域
InfoType otherinfo;
}ElemType;
/*静态查找表的顺序存储结构*/
typedef struct{
//数据元素存储空间基址,建表时按实际长度分配,0号单元留空
ElemType *elem;
//表长度
int length;
}SSTable; /*顺序查找算法
*
*在顺序表ST中顺序查找其关键字等于key的数据元素。
*若找到,则函数值为该元素在表中的位置,否则为0
*/
int Search_Seq(SSTable ST, KeyType key){
//哨兵
ST.elem[].key = key;
int i = ;
//从后往前找
for(i=ST.length; !EQ(ST.elem[i].key, key); --i);
//找不到时i为0
return i;
} //顺序打印顺序表中的数据元素
void print_Seq(SSTable ST){
int i = ;
for(i=; i<= ST.length; i++){
printf("[%d]=%d/%c; ", i, ST.elem[i].key, ST.elem[i].otherinfo);
}
printf("\n");
} int main(int argc, char *argv[])
{
int i = , loc = , key=;
ElemType arr[MAX_SIZE+] = {};
for(i=; i<argc; i++){
arr[i].key = atoi(argv[i]);
arr[i].otherinfo = 'a'+i-;
}
SSTable ST;
ST.length = i-;
ST.elem = arr;
#ifdef DEBUG
printf("输入了数据:");
print_Seq(ST);
#endif
while(){
printf("输入待查找的key值(负值表示结束):");
scanf("%d", &key);
if(key < )
break;
loc = Search_Seq(ST, key);
printf("key值为%d的位置在%d\n", key, loc);
}
return ;
}

顺序查找(顺序表)

运行

查找->静态查找表->顺序查找(顺序表)的更多相关文章

  1. 查找->静态查找表->分块查找(索引顺序表)

    文字描述 分块查找又称为索引顺序查找,是顺序查找的一种改进方法.在此查找算法中,除表本身外, 还需要建立一个”索引表”.索引表中包括两项内容:关键字项(其值为该字表内的最大关键字)和指针项(指示该子表 ...

  2. 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找

    今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...

  3. Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)

    Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)

  4. 查找->静态查找表->次优查找(静态树表)

    文字描算 之前分析顺序查找和折半查找的算法性能都是在“等概率”的前提下进行的,但是如果有序表中各记录的查找概率不等呢?换句话说,概率不等的情况下,描述查找过程的判定树为何类二叉树,其查找性能最佳? 如 ...

  5. 查找->静态查找表->折半查找(有序表)

    文字描述 以有序表表示静态查找表时,可用折半查找算法查找指定元素. 折半查找过程是以处于区间中间位置记录的关键字和给定值比较,若相等,则查找成功,若不等,则缩小范围,直至新的区间中间位置记录的关键字等 ...

  6. 算法与数据结构之顺序查找(C语言)

    #include<stdio.h> #include<stdlib.h> //顺序查找基本思想:从线性表的一端开始,逐个检查关键字是否满足给定的条件 int Sequentia ...

  7. Java 实现顺序查找

    package search; import java.util.Scanner; /*通常把查找过程中对关键字的平均比较次数,也叫平均查找长度(ASL)作为衡量一个查找算法效率优劣的标准: * AS ...

  8. 查找算法(I) 顺序查找 二分查找 索引查找

    查找 本文为查找算法的第一部分内容,包括了基本概念,顺序查找.二分查找和索引查找.关于散列表和B树查找的内容,待有空更新吧. 基本概念 查找(search)又称检索,在计算机上对数据表进行查找,就是根 ...

  9. SQLServer 查询使用键查找时锁申请及释放顺序

    最近看了高兄的一篇文章,Sql Server 高频,高并发访问中的键查找死锁解析,很有收获,里面讲到了键查找引起的死锁问题. 当然看的过程中,其实自己有个疑问: 对于键查找这类查询,会申请哪些锁,锁申 ...

随机推荐

  1. Xbox One手柄 + Xbox Wireless Adapter PC无线适配器驱动安装、配对全流程

    以下步骤在Windows 7系统中操作.XBox One手柄+无线适配器并非仅只能在Windows 10中使用. 一点感想:微软的XBoxOne手柄实在是好东西,但产品使用说明与文档实在太垃圾,翻遍官 ...

  2. linux每日命令(35):grep命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  3. TEST DESIGN TECHNIQUES: AN OVERVIEW

    TEST DESIGN TECHNIQUES: AN OVERVIEW -Test note of “Essential Software Test Design” 2015-11-16 目录: 7. ...

  4. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-5 底层驱动之旋转编码器

    源视频包下载地址:链接:http://pan.baidu.com/s/1mhENI9i密码:mf1x 银杏科技优酷视频发布区:http://i.youku.com/gingko8

  5. Public key for ambari-server-2.4.2.0-136.x86_64.rpm is not installed 安装ambari报错总结

    提示;# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release 就是导入这个安装包的key 可以使用http的协议 比如我用的就是 rpm ...

  6. stm32+rx8025

    // 设备读写地址 #define        RX8025_ADDR_READ                0x65 #define        RX8025_ADDR_WRITE       ...

  7. 阿里云 FTP 无法读取目录问题

    安全组除了添加制定 FTP端口外 需要加入再添加1024/65535端口 放行策略,ftp被动模式需要随机开一个此范围端口进行传输 添加安全组规则参考文档:https://help.aliyun.co ...

  8. Linux下apache activemq的安装与配置

    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范 的 JMS Provider实现,尽管JMS规范出台已经是很 ...

  9. 设置gem源,解决下载慢的问题

    问题解决的最好方法方法 使用google的DNS 8.8.8.8 / 8.8.4.4 另一种解决方式 修改rubygems的source源 $ gem source -r http://rubygem ...

  10. linux相关(3)

    1. shell环境变量 能够存在于本shell进程及其子shell进程的变量.变量可以从父shell进程传递给子shell进程,而不能反过来,因此环境变量在子shell进程中无论如何修改都不会影响到 ...