数据结构——实验六·散列表
嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟
Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐🔥
当然,如果你也好的资源推荐,欢迎在评论区分享,让我们共同打造一个丰富的编程资源库🔥🔥🔥
本文专栏 ➡️ 数据结构
散列表查找
本实验基于C实现散列表的创建、插入、查找。
实验目的:
- 掌握散列查找的基本思想
- 掌握散列表的构造方法
- 掌握散列表处理冲突的方法
实验内容:
假设有一个1000×1000的稀疏矩阵,其中 0.01%的元素为非零元素,现要求用散列表作存储结构。试设计一个散列表并编写相应算法,对给定的行值和列值确定矩阵元素在散列表上的位置。
在1000×1000的稀疏矩阵中,0.01%的元素为非零元素,即有100个非零元素,故选用散列函数为:H(k)-k%100,其中k是某一矩阵元素的第一下标与第二下标之和。采用拉链法解决碰撞,因此,设计若干条不带头结点的单链表,用于容纳同义词;然后设计一个指针数组,其中的元素分别指向各个单链表。
在设计时,首先建立散列表,散列表的建立可利用随机函数产生数组的行、列下标,再产生一个非零值,插入到散列表中。其次是查表,输入行、列坐标,即可输出该数组元素的值。
实验产出:
1.核心代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>typedef int DataType; // 数组元素的类型struct ZipNode { // 结点的结构int row, column; // 数组元素的行、列下标DataType value;ZipNode *next;
};ZipNode *Hash[100]; // 散列表结构// 查找散列表,查找成功,返回该结点的位置,查找失败返回NULL
ZipNode *Find_Hash(int row, int column) {int Hash_Value;ZipNode *ptr;Hash_Value = (row + column) % 100;ptr = Hash[Hash_Value];while (ptr) {if ((ptr->row == row) && (ptr->column == column))break; // 查找成功ptr = ptr->next;}return ptr;
}// 在散列表中插入数组元素
void Insert_Hash(int row, int column, int value) {int Hash_Value;ZipNode *q;Hash_Value = (row + column) % 100;q = new(ZipNode); // 申请一个结点q->row = row;q->column = column;q->value = value;q->next = Hash[Hash_Value]; // 按栈方式插入结点Hash[Hash_Value] = q;
}void Create_Hash() { // 创建散列表int i, row, column, value;for (i = 0; i < 100; i++) Hash[i] = NULL; // 初始化散列表srand((unsigned)time(NULL)); // 设置随机种子for (i = 0; i < 100; i++) { // 产生100个非零元素row = rand() % 1000; // 产生行下标column = rand() % 1000; // 产生列下标if (Find_Hash(row, column)) // 该数组元素已存在i--;else {value = rand() % 10000 + 1; // 产生一个1-10000之间的随机数Insert_Hash(row, column, value); // 插入到散列表中printf("No.=%2d, row=%4d, column=%4d, value=%5d\n", i, row, column, value);}}
}int main() {int row, column;ZipNode *ptr;Create_Hash(); // 建立散列表while (1) { // 查找数组元素printf("\n\t注意:行列号为(0-999)\n\n");printf("请输入行号(10000=结束):");scanf("%d", &row);if (row == 10000) break;printf("请输入列号:");scanf("%d", &column);if (row >= 1000 || row < 0 || column>=1000 || column < 0) {printf("\t行列号错误!请重新输入!\n");continue;}printf("row=%4d ", row);printf("column=%4d ", column);if ((ptr = Find_Hash(row, column))) { // 找到printf("value=%5d\n", ptr->value);} else { // 没找到printf("value=%5d\n", 0);}}return 0;
}
2.运行结果:
生成的散列表:


输入非零元素的行列号:

输出:

3.调试:
输入行列号错误调试:
输入不存在的行列号,验证程序是否能够正确检测到信息错误并输出相应的提示信息。
预期结果:程序应提示“行列号错误!请重新输入!”,并重新输入行列号。

如果你觉得这篇文章对你有所启发,请为博客点赞👍、收藏⭐️、评论💬或分享🔗,你的支持是Tubishu不断前行的源泉✨!衷心感谢你的鼓励与陪伴🙏!
若你有任何疑问、见解或补充,欢迎随时留言💬,让我们在交流中共同成长📚!❤️
愿各位大佬们在技术的道路上,代码顺畅无阻💻,思路清晰如光💡,不断突破自我,向着更高的目标迈进,实现自己的梦想!🎉
再次感谢你的阅读🌸
相关文章:
数据结构——实验六·散列表
嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟 Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐&…...
springboot网上书城
摘 要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括网上书城管理系统的网络应用,在国外网上书城管理系统已经是很普遍的方式,不过国内的书城管理系统可能还处于起步阶段。网上书城管理系统具有网上…...
如何在 Pytest 中使用命令行界面和标记运行测试
关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 在前文你已经初步尝试编写了代码和单元测试,并且想要确保它能正常运行。…...
不建模,无代码,如何构建一个3D虚拟展厅?
在数字化浪潮的推动下,众多企业正积极探索线上3D虚拟展厅这一新型展示平台,旨在以更加生动、直观的方式呈现其产品、环境与综合实力。然而,构建一个既专业又吸引人的3D虚拟展厅并非易事,它不仅需要深厚的技术支持,还需…...
github汉化
本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github,搜索github-chinese2.打开项目,打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动,找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…...
Unity Line Renderer Component入门
Overview Line Renderer 组件是 Unity 中用于绘制连续线段的工具。它通过在三维空间中的两个或两个以上的点的数组,并在每个点之间绘制一条直线。可以绘制从简单的直线到复杂的螺旋线等各种图形。 1. 连续性和独立线条 连续性:Line Renderer 绘制的线条…...
数据库的三级模式结构与两级映像
三级模式结构与两级映像 什么是数据库的三级模式结构?1. 模式(Conceptual Schema,概念模式)定义特点作用示例 2. 外模式(External Schema,外部模式)定义特点作用举例 3. 内模式(Inte…...
TCP断开通信前的四次挥手(为啥不是三次?)
1.四次握手的过程 客户端A发送 FIN(终止连接请求) A:我要断开连接了(FIN)。A进入FIN_WAIT_1状态,表示请求断开,等待对方确认。 服务器B回复 ACK(确认断开请求,但还未准备…...
win32汇编环境,按字节、双字等复制字符的操作
;运行效果 ;win32汇编环境,按字节、双字等复制字符的操作 ;这是汇编的优点之一。我们可以按字节、双字、四字、八字节等复制或挨个检查字符。 ;有时候,在接收到的一串信息中,比如访问网站时,返回的字串里,有很多0值存在࿰…...
.net 项目引用与 .NET Framework 项目引用之间的区别和相同
在 .NET 和 .NET Framework 项目中,引用其他库或项目的方式有一些区别和相同之处。以下是详细的对比: 相同点 引用目的: 目的:无论是 .NET 还是 .NET Framework 项目,引用其他库或项目的主要目的是为了使用这些库或项…...
RabbitMQ--延迟队列
(一)延迟队列 1.概念 延迟队列是一种特殊的队列,消息被发送后,消费者并不会立刻拿到消息,而是等待一段时间后,消费者才可以从这个队列中拿到消息进行消费 2.应用场景 延迟队列的应用场景很多,…...
使用pyboard、micropython和tja1050进行can通信
单片机和can收发器之间tx、rx不需要交叉接线!!! tja1050的rx接Y3、tx接Y4 from pyb import CANcan CAN(1) can.init(modecan.NORMAL, prescaler6, sjw1, bs14, bs22, auto_restartTrue) # 1Mbps的配置,本文使用的micropython1.…...
JS学习之JavaScript模块化规范进化论
前言 JavaScript 语言诞生至今,模块规范化之路曲曲折折。 前言 JavaScript 语言诞生至今,模块规范化之路曲曲折折。社区先后出现了各种解决方案,包括 AMD、CMD、CommonJS 等,而后 ECMA 组织在 JavaScript 语言标准层面࿰…...
亚博microros小车-原生ubuntu支持系列:7-脸部检测
背景知识 官网介绍: Face Mesh - mediapipe mpFaceMesh.FaceMesh() 类的参数有:self.staticMode, self.maxFaces, self.minDetectionCon, self.minTrackCon staticMode:是否将每帧图像作为静态图像处理。如果为 True,每帧都会进行人脸检测…...
第二届国赛铁三wp
第二届国赛 缺东西去我blog找👇 第二届长城杯/铁三 | DDLS BLOG web Safe_Proxy 源码题目 from flask import Flask, request, render_template_stringimport socketimport threadingimport htmlapp Flask(__name__)app.route(/, methods"GET"])de…...
缓存商品、购物车(day07)
缓存菜品 问题说明 问题说明:用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。 结果: 系统响应慢、用户体验差 实现思路 通过Redis来缓存菜品数据,减少数据库查询…...
4【编程语言的鄙视链原因解析】
在编程行业中,是存在鄙视链的,技术越好的圈子越不明显,技术越差的圈子越明显,很多时候为新人营造了错误的观点,我们来针对此类现象为新人们讲解原因 ①心里落差:比如你是学厨师的 你经过过年努力练…...
美团一面面经
第一个问题:介绍一下最近做的项目 第二个问题:我对你项目有个地方比较感兴趣啊。就是你用的那个二级缓存,你的吞吐量有多大啊,为什么需要使用二级缓存? 答: 在二级缓存策略下,笔记详情接口的吞…...
什么是报文的大端和小端,有没有什么记忆口诀?
在计算机科学中,**大端(Big-Endian)和小端(Little-Endian)**是两种不同的字节序(即多字节数据在内存中的存储顺序)。理解这两种字节序对于网络通信、文件格式解析以及跨平台编程等非常重要。 1…...
Spring中BeanFactory和ApplicationContext的区别
目录 一、功能范围 二、Bean的加载时机 三、国际化支持 四、事件发布 五、资源加载 六、使用场景说明 在Spring框架中,BeanFactory和ApplicationContext是两种常见的容器实现方式,它们在功能和使用场景上存在一些显著的差异。本文将详细解析这两种容…...
yaml-cpp终极内存优化指南:5个提升缓存命中率的实现技巧
yaml-cpp终极内存优化指南:5个提升缓存命中率的实现技巧 【免费下载链接】yaml-cpp A YAML parser and emitter in C 项目地址: https://gitcode.com/gh_mirrors/ya/yaml-cpp yaml-cpp是一个高性能的C YAML解析器和发射器,完全遵循YAML 1.2规范。…...
【ESP32-S3 深度实战】从小智AI底层移植到自定义LVGL表情:M5Stack CoreS3 避坑与架构指南
大家好,这里是企鹅的蚂蚁! 继上一篇打通了 M5Stack CoreS3 的 LVGL 模拟器与全双工音频后,最近我又开启了一项“硬核战役”:尝试将目前非常火的“小智 AI”底层框架移植进 CoreS3,并且完全弃用它原生的 UI,…...
脚手架封装
为什么要做脚手架? 统一项目规范,用脚手架强制统一:结构、规范、依赖、代码风格 提升开发效率,节省大量时间。新建项目不用手动配:路由、请求封装、环境变量、Eslint、Prettier 降低新员工上手成本,新人不用…...
已过期域名对SEO优化有什么影响
已过期域名对SEO优化有什么影响 在当今数字化时代,网站的搜索引擎优化(SEO)对于吸引流量和提升品牌知名度至关重要。域名作为网站的身份标志,其质量和历史往往对SEO有着深远影响。本文将探讨已过期域名对SEO优化有什么影响&#…...
二、PXE+Kickstart 无人值守批量部署操作系统;使用物理路由器的dhcp:ProxyDHCP+TFTP+HTTP+Kickstart应答文件(VMware测试环境)
前文不使用物理设备的 DHCP ,选择自行安装 DHCP 服务进行的PXEKickstart 无人值守部署操作系统的方法难以适用于家庭或企业环境,本文尝试一种使用物理设备(家庭路由器、企业交换机)的DHCP功能批量部署物理机操作系统的方案。 建议…...
快速验证抓取逻辑:在快马平台用AI十分钟搭建龙虾openclaw演示原型
最近在研究机器人抓取控制相关的技术,偶然发现了龙虾openclaw这个开源库,想快速验证下它的抓取逻辑。传统开发流程需要先搭建环境、写大量样板代码,但借助InsCode(快马)平台,整个过程变得异常简单。下面分享我的十分钟原型搭建经验…...
文献自由:ScienceDecrypting破解加密PDF的技术突破与价值重构
文献自由:ScienceDecrypting破解加密PDF的技术突破与价值重构 【免费下载链接】ScienceDecrypting 破解CAJViewer带有效期的文档,支持破解科学文库、标准全文数据库下载的文档。无损破解,保留文字和目录,解除有效期限制。 项目地…...
OpenText Static Application Security Testing (Fortify) 26.1 (macOS, Linux, Windows) - 静态应用安全测试
OpenText Static Application Security Testing (Fortify) 26.1 (macOS, Linux, Windows) - 静态应用安全测试 OpenText SAST 之前称为 Fortify SCA - 代码漏洞扫描工具 | 静态代码测试 | 代码安全分析 请访问原文链接:https://sysin.org/blog/opentext-sast/ 查看…...
PromptSource与环保科技NLP:环境数据分析的提示工程指南
PromptSource与环保科技NLP:环境数据分析的提示工程指南 【免费下载链接】promptsource Toolkit for creating, sharing and using natural language prompts. 项目地址: https://gitcode.com/gh_mirrors/pr/promptsource 在当今环保科技领域,自然…...
重磅更新!Pydantic AI 引入在线 Eval 与 MCP 控制,Agent 落地难的问题正在被解决
Agent 开发进入“深水区”:pydantic-ai v1.74.0 释放了什么信号?在 AI 应用开发的圈子里,一直存在一个尴尬的现象:写一个能跑的 Chatbot Demo 只需要一下午,但要把这个 Demo 变成稳定可靠的生产级应用,可能…...
