[数据结构]程杰:散列表(哈希表)

《大话数据结构》的笔记(作者: 程杰) 大话数据结构 程杰 第1章 数据结构绪论 2015-08-11 数据结构: 是相互之间存在一种或多种特定关系的数据元素的集合。 1.3 数据结构起源 2015-08-12 程序设计=数据结构+算法 1.4.5 数据结构 2015-08-12 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。 1.5.1 逻辑 阅读详情
#include "stdio.h"    
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

#define MAXSIZE 100 /* 存储空间初始分配量 */

#define SUCCESS 1
#define UNSUCCESS 0
#define HASHSIZE 12 /* 定义散列表长为数组的长度 */
#define NULLKEY -32768 

typedef int Status;	/* Status是函数的类型,其值是函数结果状态代码,如OK等 */ 

typedef struct
{
   int *elem; /* 数据元素存储基址,动态分配数组 */
   int count; /*  当前数据元素个数 */
}HashTable;

int m=0; /* 散列表表长,全局变量 */

/* 初始化散列表 */
Status InitHashTable(HashTable *H)
{
	int i;
	m=HASHSIZE;
	H->count=m;
	H->elem=(int *)malloc(m*sizeof(int));
	for(i=0;i<m;i++)
		H->elem[i]=NULLKEY; 
	return OK;
}

/* 散列函数 */
int Hash(int key)
{
	return key % m; /* 除留余数法 */
}

/* 插入关键字进散列表 */
void InsertHash(HashTable *H,int key)
{
	int addr = Hash(key); /* 求散列地址 */
	while (H->elem[addr] != NULLKEY) /* 如果不为空,则冲突 */
	{
		addr = (addr+1) % m; /* 开放定址法的线性探测 */
	}
	H->elem[addr] = key; /* 直到有空位后插入关键字 */
}

/* 散列表查找关键字 */
Status SearchHash(HashTable H,int key,int *addr)
{
	*addr = Hash(key);  /* 求散列地址 */
	while(H.elem[*addr] != key) /* 如果不为空,则冲突 */
	{
		*addr = (*addr+1) % m; /* 开放定址法的线性探测 */
		if (H.elem[*addr] == NULLKEY || *addr == Hash(key)) /* 如果循环回到原点 */
			return UNSUCCESS;	/* 则说明关键字不存在 */
	}
	return SUCCESS;
}

int main()
{
	int arr[HASHSIZE]={12,67,56,16,25,37,22,29,15,47,48,34};
	int i,p,key,result;
	HashTable H;

	key=39;

	InitHashTable(&H);
	for(i=0;i<m;i++)
		 InsertHash(&H,arr[i]);
	
	result=SearchHash(H,key,&p);
	if (result)
		printf("查找 %d 的地址为:%d \n",key,p);
	else
		printf("查找 %d 失败。\n",key);

	for(i=0;i<m;i++)
	{
		key=arr[i];
		SearchHash(H,key,&p);
		printf("查找 %d 的地址为:%d \n",key,p);
	}

	return 0;
}

数据结构与算法经典教材盘点(7本精选) 本文精选了7本数据结构与算法经典教材,包括《数据结构教程》(PASCAL版)、《数据结构与算法分析》(C++版)等,详细解析了每本书的特色与适用场景。这些教材不仅涵盖了排序等核心算法,还通过生活案例和可视化教学帮助读者深入理解。无论是零基础学习者还是准备技术面试的开发者,都能找到适合自己的学习资源。 阅读详情

相关推荐

2025 年国人友好神刊盘点:20 本审稿快、分区高的 SCI 期刊,速抢发文先机!

科睿唯安最新发布的 2024 年影响因子(2025 年公布)显示,多本 TOP 期刊影响因子迎来大幅上涨!尤其是对国人友好的期刊,因审稿效率高、版面费亲民、国人发文占比超 40%,成为科研人员投稿热门。本文精选 20 本潜力神刊,涵盖Cell 子刊、顶流期刊、黑马期刊、性价比之王及新晋分区 TOP,附完整的影响因子、中科院分区、审稿周期、收稿方向攻略,助你抢占发文先机!

good_rrrrr的博客 5559

Linux内核中Netlink机制分析 (含运行代码)

包括:路由(NETLINK_ROUTE)、用户态socket协议(NETLINK_USERSOCK)、防火墙(NETLINK_FIREWALL)、Netfilter子系统(NETLINK_NETFILTER)、内核事件向用户态通知(NETLINK_KOBJECT_UEVENT),通用netlink(NETLINK_GENERIC)等。Netlink协议簇初始化代码位于net/netlink/af_netlink.c中。将要发送过的netlink msg构造成skb数据包,然后发送。

嵌入式Linux内核的博客 1645

OpenSpec 从入门到精通:AI 时代的最佳 SDD 范式

同样都是「先写规范再写代码」的开源 SDD 框架,OpenSpec(https://github.com/fission-ai/openspec) 展现出了极高的工程性价比,无论是使用 Claude Code、Cursor 还是 Aider,都可以无缝接入 OpenSpec 的规格管理层。这些问题需要人来做判断,AI 做不了这个主。整个流程跑下来,OpenSpec 产出的效果还是令人满意的,一些前期没有考虑到的细节 AI 都补上了,生成的相关文档也有利于开发人员的知识对齐,可以尝试在团队内部推广。

qq_39093474的博客 925

Netlink+内核实现分析(一):创建

Netlink+内核实现分析(一):创建 Netlink 是一种IPC(Inter Process Commumicate)机制,它是一种用于内核与用户空间通信的机制,同时它也以用于进程间通信(Netlink 更多用于内核通信,进程之间通信更多使用Unix域套接字)。在一般情况下,用户态和内核态通信会使用传统的Ioctl、sysfs属性文件或者procfs属性文件,这3种通信方式都是同步通信

sinat_32343037的博客 1177

避坑指南:为什么你的conda环境装不上Mamba?从CUDA到ABI的深度排查

本文深入解析conda环境中安装Mamba架构时常见的CUDA版本冲突、ABI不匹配等问题,提供从基础检查到深度排查的系统化解决方案。针对`causal-conv1d`和`mamba-ssm`安装失败场景,详细讲解PyTorch版本绑定、编译器工具链兼容性等关键技术要点,并给出预编译wheel选择、动态链接库配置等实用修复方案。

weixin_33738555的博客 345

PX4(CUAV v6x 飞控)+ QAV250 机架无人机组装测试教学(无人机电机转向不对,如何反转电机?)

本文介绍无人机的组装与飞控调试:1.无人机的硬件组装。2.无人机飞控软件的下载,电机、遥控器、电调的校准与调试。

weixin_74185504的博客 2889

散列表_HashTable

#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 /* 存储

happylife1527的专栏 458

STM32CubeIDE串口打印浮点数踩坑实录:5分钟搞定printf输出小数(附完整配置截图)

本文针对STM32CubeIDE中串口无法打印浮点数的常见问题,提供了详细的解决方案。核心在于通过添加“-u _printf_float”链接器参数,启用标准库的浮点数格式化支持。文章附有完整的配置截图和步骤,并提供了系统性的排查清单,帮助开发者快速解决printf输出小数的问题。

weixin_29163797的博客 343

数据结构 哈希表

前言 这是一类用于查找到数据结构 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings('ignore') i...

m0_62598965的博客 538

PP触发EWM产生PMR捡配

PP触发EWM产生PMR捡配 前言 PMR: Production Material Request 在流程订单/生产订单下达后,可以在EWM中产生PMR,在EWM中, PMR其实代表了ERP中的流程订单/生产订单。 You can use SAP EWM in conjunction with the following PP application components: • Production Orders • Process Orders • Repetitive Manufacturing •

ZevYang的博客 1918

手把手教程 | 使用 apktool 修改已发布 APK 的版本号与版本名称

摘要:本文介绍如何使用apktool工具直接修改APK版本信息,适用于版本回滚、多版本测试等场景。详细步骤包括反编译APK、修改版本号、重打包、对齐优化和重新签名,并分享了反编译相关实用知识。该方法无需源代码参与,但需注意修改后的APK必须重新签名才能安装。最后强调应在合法范围内使用反编译技术。

学无止境 825

Netlink 内核实现分析 1

Netlink 是一种IPC(Inter Process Commumicate)机制,它是一种用于内核与用户空间通信的机制,在一般情况下,用户态和内核态通信会使用传统的Ioctl、sysfs属性文件或者procfs属性文件,这3种通信方式都是同步通信方式,由用户态主动发起向内核态的通信,内核无法主动发起通信。Netlink是一种异步全双工的通信方式,它支持由内核态主动发起通信,内核为N...

weixin_30701575的博客 358

30. 用GPT-4自动生成测试用例的完整流程

利用GPT - 4生成测试用例面临的主要问题包括:如何准确地将软件需求转化为GPT - 4能够理解的输入提示,以确保生成的测试用例覆盖所有关键功能;如何评估生成的测试用例的有效性和充分性;如何处理生成的测试用例中的错误或不合理之处;以及如何将生成的测试用例集成到现有的测试框架中。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 472

哈希表(散列表)基础知识总结

目录 1.散列表概述 1.1散列表查找定义 1.2散列表查找步骤 2.散列函数的构造方法 2.1直接定址法 2.2数字分析法 2.3平方取中法 2.4折叠法 2.5除留余数法 2.6随机数法 3.处理散列冲突的方法 3.1开放定址法 3.2再散列函数法 3.3链地址法 3.4公共溢出区法 4.散列表查找实现 4.1散列表查找算法实现 4.2散列表查找性能分析 ...

qq_40692109的博客 2543

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

《数据结构与算法》(二十)- 散列表查找

目录前言1. 散列表查找(哈希表)概述1.1 散列表查找定义1.2 散列表查找步骤2. 散列函数的构造方法2.1 直接定址法2.2 数字分析法2.3 平方取中法2.4 折叠法2.5 除留余数法2.6 随机数法3. 处理散列冲突的方法3.1 开放定址法3.2 再散列函数法3.3 链地址法3.4 公共溢出区法4. 散列表查找的实现4.1 散列表查找的算法实现4.2 散列表查找性能分析5. 总结 前言 部分内容摘自程杰的《大话数据结构》 1. 散列表查找(哈希表)概述   在前面的顺序表查找中,我们曾经说过,如

程序园@大Null 1635

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【哈希表——简单实现】

#include<stdio.h> #include<malloc.h> #define MAXSIZE 12 #define Status int #define TURE 1 #define FALSE 0 #define NULLKEY -32768 // 哈希表 typedef struct HASHTABLE{ int* elem; int ...

piano_diano的博客 164

程杰《大话数据结构》8-5 散列表(C语言源码+运行结果)

#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 100 /* 存储空间初始分配量 */...

春卷同学的博客 278

Java数据结构第一讲-排序算法

常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据结构,例如跳表之于redis、B+树之于mysql、倒排索引之于ES,熟悉了底层数据结构,对框架有了更深层次的理解,在后续程序设计过程中就更能得心应手。掌握常见数据结构和算法的重要性显而易见,本文主要讲解了几种常见的数据结构及基础的排序和查找算法,最后对高频算法笔试面试题做了总结。本文会持续补充,希望对大家日

Jet_qi的博客 1614

数据结构和算法:什么是数据结构,什么是算法

文章标题前言 前言   这几天在复习数据结构的

undefinedUser_1的博客 4870

用开源项目死磕数据结构与算法!

程序员的双手是魔术师的双手,他们把枯燥无味的代码变成了丰富多彩的软件。——《疯狂的程序员》 前言 数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一。数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合,特殊的结构在不同的应用场景中往往会带来不一样的处理效率。 今天给大家推荐一个开源的项目,对大家学习或者复习数据结构与算法很有帮助. 项目名称 DataStructureForJava 项目介绍 该项目用Java语言实现了常见的数据结构 包括但不限于 常用.

weixin_44028058的博客 345

数据结构总结

栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶(top)。当然,表也包括了很多类型,例如:线性表(链表),散列表,队列、栈等,他们都是表的一种特殊情况,而他们各自又可以根据情况不同,而使用不同的类型,比如说链表在不同的情况下可使用链表、双链表,循环链表。在这里,数值[0]所对应的便是milk,数值[3]所对应的便是apple,当我们查找apple时,它便会立马定位到数值[3],而不是通过遍历的方式从数值[0]一直往后遍历,因此它的时间复杂度仅为O(1)。

m0_53082780的博客 2051

数据结构与算法常用名词术语整理

binary search 二分查找 half-interval search 折半查找 logarithmic search 对数搜索 sentinel 哨兵 pivot 基准数 median 中位数,中值 partition 分割 percolate 过滤 sentinel 哨兵 linear time 线性时间 logarithmic time 对数时间 call st...

雪峰流云 1203

Qiuner赠书活动:算法图解、C++ Primer Plus、大话数据结构、Java项目全程开发实录、算法导论、深度学习、第一视角带你构建大模型GPT

人年轻时常觉空虚,总想找点什么填满自己。买书,是我曾经的一种方式。但买得多,看得少。最近想着,这些书放着也是放着,不如抽几本送给粉丝,包邮寄出。

Java、Python、AI、前沿技术等领域的技术总结和经验分享。 7777

跨专业小白如何在最短时间内搞定数据结构

一、前言 最近觉得压力好大,又没有论文,也没有实习,所以也对毕业都有了压力,自己真的好菜,但是还是得努力前行。 为了找工作就必须有些真本事,刷题遇到困难,发现什么都不会,原来问题的根源就是自己数据结构根本都没有概念。而且因为这个问题,我正常的专业的学习也收到了影响,而不仅仅是刷题受阻。 那现在就开始学习,这个帖子用来记录,加油! 看了知乎的一个主题:**如何在最短的时间内搞定数据结构和算法,应付面...

Amazingren的博客 1223

什么是数据结构?程序员如何学好数据结构?

前几天,小灰给大家介绍了什么是算法。 说到算法,就不能不说起数据结构。今天我来讲一讲,什么是数据结构?程序员怎么学好数据结构? 我们介绍算法的时候说过,计算机当中的算法,本质就是一系列程序指令,用以解决特定的运算和逻辑问题。 而所谓数据结构,是数据的组织、管理和存储格式。简单理解的话,数据结构就是执行算法的“原材料”。 俗话讲,巧妇难为无米之炊。算法,就好比是聪明勤劳的女主人,而数据结构,就是用来做饭做菜的柴米油盐。 数据结构都有哪些组成方式呢? 首先,是线性结构。 但凡有过一点编程基

延宝小白马的博客 316

2021数据结构学习笔记(严蔚敏版)

2021数据结构学习笔记(严蔚敏版) 第2章 线性表 线性表的顺序表示和实现 线性表的顺序表示和实现(二级指针实现) 线性表的链式表示和实现 静态链表 循环链表 双向链表 第三章 栈和队列 栈 栈的应用—递归 队列 第五章 数组 数组 第六章 树和二叉树 树和二叉树 二叉树的创建方式 遍历二叉树及其应用 线索二叉树 树和森林 哈夫曼树及其应用 第七章 图 图的基本概念和存储方式 图的遍历 图的最小生成树 图的拓扑排序和关键路径 图的最短路径 第九章 查找 静态查找表 动态查找表(BST/AVL/B/B+/R

张小憨憨的博客 2273
上一篇: [数据结构]程杰—— 二叉排序树_BinarySortTree
下一篇: 由先序遍历和中序遍历构造二叉树的二叉链表代码
ilikeprograming
博客等级 码龄14年 46粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值