首页 > 其他分享 >线性探测法的查找函数 作者 DS课程组 单位 浙江大学

线性探测法的查找函数 作者 DS课程组 单位 浙江大学

时间:2024-12-02 15:10:15浏览次数:5  
标签:typedef int 查找 Key 浙江大学 Position ElementType 散列 DS

虽然但是,我真的讨厌c语言这样一大坨typedef命名来命名去的,很多时候其实我们会写,但是看不懂这个存储结构

函数的接口定义

Position Find( HashTable H, ElementType Key );

其中HashTable是开放地址散列表,定义如下:

#define MAXTABLESIZE 100000  /* 允许开辟的最大散列表长度 */
typedef int ElementType;     /* 关键词类型用整型 */
typedef int Index;           /* 散列地址类型 */
typedef Index Position;      /* 数据所在位置与散列地址是同一类型 */
/* 散列单元状态类型,分别对应:有合法元素、空单元、有已删除元素 */
typedef enum { Legitimate, Empty, Deleted } EntryType;

typedef struct HashEntry Cell; /* 散列表单元类型 */
struct HashEntry{
    ElementType Data; /* 存放元素 */
    EntryType Info;   /* 单元状态 */
};

typedef struct TblNode *HashTable; /* 散列表类型 */
struct TblNode {   /* 散列表结点定义 */
    int TableSize; /* 表的最大长度 */
    Cell *Cells;   /* 存放散列单元数据的数组 */
};

函数Find应根据裁判定义的散列函数Hash( Key, H->TableSize )从散列表H中查到Key的位置并返回。如果Key不存在,则返回线性探测法找到的第一个空单元的位置;若没有空单元,则返回ERROR。

输入样例

11
11 88 21 -1 -1 5 16 7 6 38 10
38

输出样例

38 is at position 9.

裁判测试程序样例:

#include <stdio.h>

#define MAXTABLESIZE 100000  /* 允许开辟的最大散列表长度 */
typedef int ElementType;     /* 关键词类型用整型 */
typedef int Index;           /* 散列地址类型 */
typedef Index Position;      /* 数据所在位置与散列地址是同一类型 */
/* 散列单元状态类型,分别对应:有合法元素、空单元、有已删除元素 */
typedef enum { Legitimate, Empty, Deleted } EntryType;

typedef struct HashEntry Cell; /* 散列表单元类型 */
struct HashEntry{
    ElementType Data; /* 存放元素 */
    EntryType Info;   /* 单元状态 */
};

typedef struct TblNode *HashTable; /* 散列表类型 */
struct TblNode {   /* 散列表结点定义 */
    int TableSize; /* 表的最大长度 */
    Cell *Cells;   /* 存放散列单元数据的数组 */
};

HashTable BuildTable(); /* 裁判实现,细节不表 */
Position Hash( ElementType Key, int TableSize )
{
    return (Key % TableSize);
}

#define ERROR -1
Position Find( HashTable H, ElementType Key );

int main()
{
    HashTable H;
    ElementType Key;
    Position P;

    H = BuildTable(); 
    scanf("%d", &Key);
    P = Find(H, Key);
    if (P==ERROR)
        printf("ERROR: %d is not found and the table is full.\n", Key);
    else if (H->Cells[P].Info == Legitimate)
        printf("%d is at position %d.\n", Key, P);
    else
        printf("%d is not found.  Position %d is returned.\n", Key, P);

    return 0;
}

/* 你的代码将被嵌在这里 */

题解代码

Position Find( HashTable H, ElementType Key ){
         int id=Hash(Key,H->TableSize); //找到其索引
        for(int i=0;i<H->TableSize;i++)
        {
            if(H->Cells[id].Info==Empty || H->Cells[id].Data==Key) return id;
            id=(id+1)%(H->TableSize); //线性探测每次+1
        }

        return ERROR;
}

标签:typedef,int,查找,Key,浙江大学,Position,ElementType,散列,DS
From: https://www.cnblogs.com/swjswjswj/p/18581934

相关文章

  • Marco-o1: Towards Open Reasoning Models for Open-Ended Solutions
    本文是LLM系列文章,针对《Marco-o1:TowardsOpenReasoningModelsforOpen-EndedSolutions》的翻译。Marco-o1:面向开放式解决方案的开放推理模型摘要1引言2Marco推理数据集3通过MCTS扩展解决方案空间4推理行动策略5实验6翻译任务案例研究7结论和未来......
  • 亚马逊僵尸链接查找与合并全流程教学-月亮树跨境教程
    一、僵尸链接是什么二、高效采集僵尸链接三、僵尸链接合并实操1、前提条件2、修改品牌3、下载合并表格4、表格填写5、表格上传 一、僵尸链接是什么:僵尸链接,通俗来讲就是链接还挂在亚马逊上,但是却没有卖家。点进去这个链接你会看到提示“Currentlyunavailable(目前不......
  • Java面试要点54 - Java List的二分查找算法
    文章目录一、引言二、二分查找的基本原理三、JavaCollections工具类中的二分查找四、自定义比较器的二分查找实现五、处理特殊情况六、性能优化与最佳实践七、总结一、引言在Java程序开发中,查找操作是一个非常基础且关键的算法需求。其中,二分查找(BinarySearch)......
  • CoD, Towards an Interpretable Medical Agent using Chain of Diagnosis
    文章标题CoD,TowardsanInterpretableMedicalAgentusingChainofDiagnosis发表日期2024.9.15文章地址https://arxiv.org/abs/2407.133011.文章解决的问题诊断过程透明性缺失:LLMs在医疗诊断时类似于黑箱操作,虽能给出诊断......
  • 【二分查找】力扣 275. H 指数 II
    一、题目二、思路h指数是高引用引用次数,而citations数组中存储的就是不同论文被引用的次数,并且是按照升序排列的。也就是说h指数将整个citations数组分成了两部分,左半部分是不够引用h次的论文,右半部分论文的引用次数都是大于等于h的。因此,可以采用二分查找的......
  • 不同格式图片转到GDS格式
    因为别人问我这个怎么转,在网上找了很多,但都没有一个确切的答案,最后在GitHub上看到了一个脚本,可以解决这个问题。GitHub-kadomoto/picture-to-gds:将图像文件转换为GDSII文件的Python脚本需要提前安装的库有NumPyopenCVgdspy点击Code-->DownloadZIP,解压这个文件,会......
  • 安装完u9后报【没有终结点在侦听可以接受消息的 http://localhost/6.0/SystemCommandS
    没有终结点在侦听可以接受消息的http://localhost/6.0/SystemCommandService/SysManageServer。这通常是由于不正确的地址或者SOAP操作导致的 安装完u9后报【没有终结点在侦听可以接受消息的http://localhost/6.0/SystemCommandService/SysManageServer。这通常是由于不......
  • EfficientNet-resDDSC:一种集成残差块和扩展卷积的混合深度学习模型推断单细胞数据中的
    中文关键词:单细胞测序scRNA-seq,基因调控关系,基因调控网络,调控因果关系,深度学习,机器学习 中文摘要:基因调控网络(GRNs)揭示了生物体内基因之间的复杂相互作用,这对于理解生命系统的运作至关重要。生物技术的快速发展,特别是单细胞RNA测序(scRNA-seq),产生了大量的scRNA-eq数据,可以在......
  • GEE 图表——利用Landsat TOA数据计算和监测1990-2023年的巢湖水库水体面积
    目录简介函数ui.Chart.image.series(imageCollection, region, reducer, scale, xProperty)Arguments:Returns: ui.Chart代码解释示例代码段全代码结果简介GEE教程——利用LandsatTOA数据计算和监测1990-2023年的巢湖水库水体面积函数ui.Chart.image.seri......
  • HDMI TMDS和FRL协议是什么?
    HDMITMDS和FRL协议简介HDMI2.1标准引入了两种不同的信号传输技术:TMDS(TransitionMinimizedDifferentialSignaling)和FRL(FixedRateLink)。这两种技术在带宽、分辨率支持以及应用领域上有所不同。TMDS:是HDMI自最初版本以来一直使用的信号传输方式。它通过减少信号过渡来最......