C语言 数据结构 之 顺序查找法

C语言-五种排序、两种查找 一个处女座的程序员小白 阅读详情

顺序查找法

顺序查找的查找过程:从表的一端开始,依次将记录的关键字和给定值进行比较,若某个记录关键字和给定值相等,则查找成功;反之,若查找整个表后,仍未找到关键字和给定值相等的记录,则查找失败。

顺序查找方法既适用于线性表的顺序存储结构,又适用于线性表的链式存储结构。

数据元素类型的定义:

typedef int KeyType ;

typedef struct {
    KeyType key;        //关键字域
}ElemType;

typedef struct {
    ElemType *R;        //存放查找表中元素的数组
    int length;         //记录查找表中的长度
}SSTable;

创建查找表

创建数据表,在表内查找;里面元素个数和内容自由定义,开放性比较高。

在最后尝试打印表内元素,防止没有把元素写进表内。

void Create_List(SSTable *ss,int length){
    printf("请输入元素个数:");
    scanf("%d",&length);
    ss->length = length;
    ss->R = (ElemType *)malloc((length + 1) * sizeof(ElemType)); //分配内存
    printf("请依次输入元素:");
    for(int i = 1;i <= length;i++){
        int arr = &ss->R[i].key;
        scanf("%d",arr);
    }
    //打印表中元素
//    for(int i =1;i<=ss->length;i++){
//        printf("%d",ss->R[i].key);
//    }
}

顺序查找的方法:

int Search_Seq(SSTable ss,KeyType key){
    ss.R[0].key = key;
    int i = ss.length;
    while (ss.R[i].key != key){
        i--;
    }
    return i;
}

顺序查找的优点:算法简单,对表结构无任何要求,既适用顺序结构,也适用链式结构,无论记录是否按关键字有序均可应用。

缺点:平均查找长度较大,查找效率低,所以当n很大时候,不宜采用顺序查找。

完整代码:

#include <stdio.h>
#include <stdlib.h>
//顺序查找
typedef int KeyType ;

typedef struct {
    KeyType key;        //关键字域
}ElemType;

typedef struct {
    ElemType *R;        //存放查找表中元素的数组
    int length;         //记录查找表中的长度
}SSTable;

//创建查找表
void Create_List(SSTable *ss,int length){
    printf("请输入元素个数:");
    scanf("%d",&length);
    ss->length = length;
    ss->R = (ElemType *)malloc((length + 1) * sizeof(ElemType)); //分配内存
    printf("请依次输入元素:");
    for(int i = 1;i <= length;i++){
        int arr = &ss->R[i].key;
        scanf("%d",arr);
    }
    //打印表中元素
//    for(int i =1;i<=ss->length;i++){
//        printf("%d",ss->R[i].key);
//    }
}

//顺序查找
int Search_Seq(SSTable ss,KeyType key){
    ss.R[0].key = key;
    int i = ss.length;
    while (ss.R[i].key != key){
        i--;
    }
    return i;
}

int main() {
    SSTable ss;
    int length,key,location;
    Create_List(&ss,length);
    while (1){
        printf("请输入要查找的关键字:");
        scanf("%d",&key);
        location = Search_Seq(ss,key);
        if (location == 0){
            printf("查找失败!\n");
        } else{
            printf("数据在查找表中的位置为:%d\n",location);
        }
    }
    return 0;
}

在主函数内,给定一个while的死循环,方便查找多次,不用每查找一次就运行一次代码。

但是代码有个bug,偶尔出现卡了,就是在查找内容时候,没有出结果,特别是查找不在表内的元素。
望有师傅出手修改修改。

最后:这个是我的一次数据结构的作业。

查找中的数据结构之无序表和有序表 查找引入 在大数据时代,如何在海量数据中快速检索到自己想要的数据?首先需要设计高效的数据结构来表示这些数据,要存储的数据一般分为两个部分,键和值,如何根据键值去安排这些数据尤为重要,首先我们想到线性存储,即利用表的形式线性存储,线性查找,即符号表这种数据结构. 符号表 符号表线性存储数据,但是根据在插入操作过程中是否保证数据有序分为无序表和有序表: 0.无序表 无序表API(仅实现了... 阅读详情

相关推荐

【算法积累】二分查找法

二分查找法简介   二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。   首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查...

CCH²¹的博客 887

数据结构查找排序代码部分总结

数据结构排序和查找算法

kanzwienhoff的博客 1832

第七章习题15-写几个函数:①输入10个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半查找法找出该职工姓名,从主函数输入要查找的职工号,输出该职工姓名

希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,支持一下笔者吧~

Larry的博客 492

C语言实现顺序查找

C语言顺序查找

weixin_59566851的博客 8733

数据结构课程设计C/C++版--美团餐馆预定信息的管理与分析19 20

本关任务:编写一个能删除用户信息的程序。首先输入需要注销的用户账号,根据用户账号查询对应的用户,如果找到,遍历用户列表将待删除用户之后的数据前移,将表的长度减1,并将最新的用户数据保存到顺序表,输出“注销成功!否则,输出“用户不存在!本关任务:编写一个能查询用户信息的程序。首先输入需要查询的用户账号,之后采用折半查找的方法查询顺序表中的用户信息,如果找到,输出用户账号额联系方式;根据提示,在右侧编辑器补充代码,实现查询某个用户的功能。根据提示,在右侧编辑器补充代码,实现删除某个用户的功能。

m0_62222486的博客 349

植物GO注释

本文主要是对没有GO term库的植物进行注释。 1、选用AgriGo 进行注释,在agriGO中点击species后,查看与你目标物种相近的物种作为库 2、比如我以甜菜为例 为了找到和GO term对应的ID,先找到PLAZA,进入网站https://bioinformatics.psb.ugent.be/plaza/versions/plaza_v3_di...

weixin_30300225的博客 2224

数据结构-查找(顺序查找与二分查找的讲解与代码实现)

前提条件是有序序列,即每次从序列的中间开始于所要查找的元素比较,如果中间元素小于key(要查找的元素)则从中间元素的右边查找(以中间元素+1为首元素,尾元素不变,再去求mid于key相比)。顺序查找概念:从表的另一端开始,一次将记录的关键字和给定值进行比较,若某个记录的关键字和给定的值相等,则查找成功,反之则查找失败。查找1的次数为1概率为1/3,2为两次概率1/3,3的次数为3概率1/3。所以顺序查找的ASL为:n*(n+1)/2*(1/n)=(n+1)/2。每次查找的概率为1/n。

weixin_73612682的博客 1698

别再到处找模板了!手把手教你用Vue3+Element Plus搭建一个‘能跑起来’的管理后台原型

本文详细介绍了如何利用Vue3和Element Plus在72小时内快速搭建一个功能完整的管理后台原型。从环境准备到项目获取、依赖安装、原型定制、数据模拟以及构建优化,手把手教你打造一个可直接演示的后台系统,特别适合创业者快速验证产品逻辑。

weixin_26854555的博客 182

数据结构 顺序查找法(C语言)

//*arr:目标数组的指针 //lenght:目标数组长度 //key:要查找的值 int Search(int *arr,int lenght, int key) { //定义指针i,准备循环数组找到关键字 int i; //如果指针i小于数组长度并且当前值不等于关键字则循环 for (i = 0; i < lenght && key != arr[i]; i++); //指针i等于数组长度,证明循环数组一整遍都未找到关键字,返回-1 if (i == lenght)

櫆溟的博客 783

IPD的分析工具与模型(十六)CBB公用基础模块管理实现资源共享,缩短开发周期

CBB流程的开发环节,基于CBB规划中所识别和设计的CBB,进行CBB的详细设计(包括参数设计和接口设计),并最终实现CBB的落地开发。作为特殊类型的技术构件,CBB的开发流程,可沿用技术开发中的构件开发流程,具体包括概念、计划、开发和迁移等步骤,具体可参见前文的相关介绍。有了蓝图与架构设计,落地实施是关键攻坚。具体工作内容包括:具体工作内容包括:a. 以相似性、聚类、相对独行性、可组合、可扩展性、可维护性等原则为指导,按照产品的功能特征和业务类型,聚焦零散的功能点,形成功能模块,实现产品功能模块的划分;

corgi2020的博客 2000

RK3588 buildroot 制作的系统增加 docker 支持

RK3588 使用buildroot制作的系统添加 docker 和 docker-compose 的功能

荻夜的博客 1567

综合题(交换)

#include<stdio.h> #define MaxSize 50 typedef struct LNode{ int data[MaxSize]; int length; }LNode; //初始化顺序表 void init(LNode &L){ L.length = 0; } //构建顺序表 ...

weixin_30632883的博客 321

基于Simulink进行步进电机的重复控制仿真建模

目的:通过引入一个周期延迟环节来补偿系统的周期性误差,从而提高系统对周期性参考信号或扰动的跟踪性能。方法内部模型原理:在控制器中嵌入一个与周期性信号相关的模型(例如周期延迟环节),以实现对周期性误差的零稳态误差控制。滤波器设计:为了避免高频噪声放大,通常会在重复控制器中加入低通滤波器。优势对周期性信号具有良好的跟踪性能。不需要精确的数学模型即可实现高性能控制。挑战:需要合理设计重复控制器的参数以避免系统不稳定。

MHD0815的博客 382

C语言学习系列三十八——数组再学习(1)

数组定义 例 : int a[10]; ——数组名后一定跟的数字; //输出所有大于平均值的数 #include<stdio.h> int main() { int a[10+2]; int i,j,k; double sum,ave; printf("enter 10 numbers: "); for(i=0; i&lt...

超人琪的博客 229

Codex入门24-效率倍增秘籍(终极总结:10个让你开发速度翻倍的Codex高级技巧)

专栏收官之作!经过前23篇的系统学习,你已经掌握了 Codex CLI 的核心用法。本文浓缩10个实战验证的高级技巧:管道化提示词将复杂任务拆成递进指令链,模板化 SKILL.md 打造个人技能库,Shell 别名让操作快如闪电,多模型切换省钱又高效……这不是理论课,每个技巧都配有可直接运行的代码。掌握全部10招,构建你的 AI 开发工作流闭环,让开发速度真正翻倍!

yueyeguzhuo的专栏 189

ubuntu emto-cpa安装与编译

ubuntu emto-cpa安装与编译

qq_45834835的博客 1435

计算机二级c语言基础知识总结,二级c语言公共基础知识总结

全国计算机二级考试主要考核使用一种高级计算机语言编写程序以及上机调试的基本技能,设有VisualBASIC程序设计、VC++语言程序设计和VisualFoxPro等语种。以下是由学习啦小编整理关于二级c语言公共基础知识总结的内容,希望大家喜欢!第一章 数据结构与算法1.1 算法算法:是指解题方案的准确而完整的描述。算法的基本特征:(1)可行性:算法原则上可以精确执行,而且人们用纸和笔做有限次运算后...

weixin_35125164的博客 284

【100%通过率】华为OD机试真题2026双机位C卷 C语言 实现【加密算法】

【100%通过率】华为OD机试真题2026双机位C卷 Python&JS 实现【加密算法】有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下

MISAYAONE的博客 646

数据结构实验

1. 已知一组给定的数据{11,22,33,40,55,60,70,80,90,99},从键盘输入需要查找的数据,并在上述数据中查找给定数据是否存在。(折半查找法) (1)取中间位置Mid:MidL(Low+High)/2」; (2)比较中间位置记录的关键字与给定的K值 ①相等:查找成功; ②大于:待查记录在区间的前半段,修改上界指 针:High=Mid-1,转(1); ③小于:待查记录在区间的后半段,修改下界指 针:Low=Mid+1,转(1); 直到越界(Low>High),

m0_69859738的博客 148

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

二分法查找

二分法查找

Twilight's Blog 337

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

408真题顺序表部分(二)

本文主要讲解历年408考试中数据结构部分关于顺序表的代码题,尽可能多的方法和思路帮助大家,欢迎评论区留言交流!

阿宾爱干饭 1363

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

插入排序(C语言版)

我的理解:采用顺序插找法寻找元素插入的位置。

2401_88180276的博客 280

利用二分法查找 设计人与计算机猜数游戏,计算机二级MS OFFICE 练习题(二〇五)...

原标题:计算机二级MS OFFICE 练习题(二〇五)1、没有定义:char p[]={'1','2','3'),*q=p;,以下不能计算出一个char型数据所占字节数的表达式是( )。A. sizeof(p) B. sizeof(char) C. sizeof(*q) D. sizeof(p[o])参考答案:A:【解析】选项A计算的是p口字符数组首地址所占的内存字节数。选项B、C和D都能计算出一...

weixin_39815600的博客 258

顺序查找法 C语言小游戏

顺序查找法 C语言小游戏设计一个C程序,生成0-150之间的随机数,然后实现顺序查找法的过程并显示其具体查找步骤。 查找-是最常见的数据操作之一,数据结构核心运算之一,其重要性不言而喻。顺序查找是人们最熟悉的查找策略,对于小规模的数据,顺序查找是个不错的选择。 1.顺序查找: 核心:从数据的第一个元素开始,依次比较,直到找到目标数据或查找失败。 1.从表中的第一个元素开始,依次与关键字比较。 2.若某个元素匹配关键...

weixin_40933653的博客 234

c语言实现二分查找法

目录 一.前言 二.二分查找法 1.什么是二分查找法 2.如何用c语言来实现二分查找法 三.总结 一.前言 假如今天我们需要在一个有序的数组中来寻找一个数的下标,就用"1,2,3,4,5,6,7,8,9"这九个数组成的数组来说,假如我们想寻找'2',那很简单我们只用从小到大开始寻找,寻找两次就完成了,但是我们想寻找'7',我们继续用从小到大挨个寻找,这就显得有点慢并且耗时长还没有效率,因此我们可以有一种全新的方法,二分查找法来解决这个问题。 二.二分查找法 1.什么是二分查找法 二分查找

weixin_64448174的博客 1万+

数据结构笔记7:折半查找法(二分查找法)及C语言实现

折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。但是该算法的使用的前提是静态查找表中的数据必须是有序的。 折半查找算法 对静态查找表{5,13,19,21,37,56,64,75,80,88,92}采用折半查找算法查找关键字为 21 的过程为: 如上图 1 所示,指针 low 和 high 分别指向查找表的第一个关键字和最后一个关键字,指针 mid 指向处于 lo...

亦木的博客 1572
下一篇: C语言 数据结构 折半查找(二分查找)
披星斩月
博客等级 码龄7年 14粉丝 3原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值