首页 > 其他分享 >线性探测法的查找函数

线性探测法的查找函数

时间:2023-12-14 23:23:39浏览次数:33  
标签:typedef TableSize int 探测 查找 Key 线性 Position ElementType

#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 x=Hash(Key,H->TableSize);
int a=0;
while(a<H->TableSize){
if(H->Cells[x].Info==Empty||H->Cells[x].Data==Key){
return x;
}
x=(x+1)%H->TableSize;
a++;
}
return ERROR;
}

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;
}

标签:typedef,TableSize,int,探测,查找,Key,线性,Position,ElementType
From: https://www.cnblogs.com/zh-ang-zhang/p/17902442.html

相关文章

  • 查找列表(表格的列名)是否包含某些列名字符串
    lis=["非关键词","关键词1","/s关键词2/s","重复的关键词1"]keywords=["关键词1","关键词2","关键词3"]result={}foriinkeywords:find=Falseforj,kinenumerate(lis):ifnotfind:......
  • Excel 公式SWITCH函数你用过吗?多种查找函数介绍
    我们公司的项目上的模板使用了Excel的Switch函数,今天我使用的时候,发现报错,无法使用。环境说明我使用的是Windows10专业版,Office2016报错信息在Excel中的报错如下: 单元格的公式如下:=F8*_xlfn.SWITCH(H8,"高",1.5,"中",1,"低",0.5)*(100-I8)/100 查找问题从网上找了......
  • 机器学习-线性回归-多项式升维-07
    目录1.为什么要升维2代码实现3,总结1.为什么要升维升维的目的是为了去解决欠拟合的问题的,也就是为了提高模型的准确率为目的的,因为当维度不够时,说白了就是对于预测结果考虑的因素少的话,肯定不能准确的计算出模型。在做升维的时候,最常见的手段就是将已知维度进行相乘来构建......
  • 代码随想录算法训练营第一天|704.二分查找、27.移除元素
    LeetCode704二分查找题目链接704.二分查找二分法确定区间(循环不变量):对于有序数组,定义循环区间二分查找元素 LeetCode27.移除元素题目链接:27.移除元素快慢指针,快指针查,慢指针存 ......
  • 代码随想录算法训练营第一天 | 数组理论基础,704. 二分查找,27. 移除元素
    一、数组理论基础学习前:1.数组定义一些在内存上连续存储的相同数据类型的数据的集合2.数组特征便于查询数组元素,不便于增删数据元素学习后:对于Java,二维数组不一定在内存上连续。如int[i][j],唯一确定的是int[i][]在内存上连续二、704.二分查找LeetCode704.二分查找......
  • 代码随想录算法训练营第一天| LeetCode704 二分查找、27移除元素
     Leetcode704:二分查找今日学习的文章链接:代码随想录(programmercarl.com) 题目链接:704.二分查找-力扣(LeetCode)●  自己看到题目的第一想法这题我会,但是还没明白卡尔说的循环不变量是什么意思。我的固定思路就是,target比中间值大,左指针右移到mid+1;target比中间值......
  • 算法学习Day1,二分查找,移除元素
    Day1二分查找,移除元素ByHQWQF2023/12/13笔记704.二分查找给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。解法:使用二分查找来在一个有序的数组中找到指定元素的下标。根据数据边界......
  • 用icu探测字符集
    g++str-charset.cpp-licui18n #include<iostream>#include<stdio.h>#include<string.h>#include<unicode/ucnv.h>#include<unicode/utypes.h>//#include<unicode/urename.h>#include<unicode/ucsdet.h>boolwhat_chars......
  • 代码随想录算法训练营Day1 | 704.二分查找、27.移除元素
    LeetCode704.二分查找二分查找是一种基础的算法,其核心思想在高中数学中就已经被大家所熟知了,然而对于代码的实现,其细节问题常常令人头疼,比如while循环的条件是什么?middle是该+1还是-1?这些问题需要有一个清晰的认知。题目链接如下:704.二分查找Carl的讲解链接:二分查找算法......
  • 文件查找、打包压缩与解压:文件管理的得力助手
    在数字化时代,文件管理变得愈发复杂,而有效的文件查找、打包压缩和解压工具成为提高工作效率和节省存储空间的不可或缺的一部分。本文将深入探讨这三个方面,介绍一些流行的工具和技巧,助你在文件管理的道路上游刃有余。文件查找:迅速定位目标在庞大的文件系统中迅速定位目标文件是一......