当前位置: 首页 > news >正文

数据结构——实验六·散列表

嗨~~欢迎来到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的博客&#x1f338;如果你也是一名在校大学生&#xff0c;正在寻找各种编程资源&#xff0c;那么你就来对地方啦&#x1f31f; Tubishu是一名计算机本科生&#xff0c;会不定期整理和分享学习中的优质资源&#xff0c;希望能为你的编程之路添砖加瓦⭐&…...

springboot网上书城

摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括网上书城管理系统的网络应用&#xff0c;在国外网上书城管理系统已经是很普遍的方式&#xff0c;不过国内的书城管理系统可能还处于起步阶段。网上书城管理系统具有网上…...

如何在 Pytest 中使用命令行界面和标记运行测试

关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 在前文你已经初步尝试编写了代码和单元测试&#xff0c;并且想要确保它能正常运行。…...

不建模,无代码,如何构建一个3D虚拟展厅?

在数字化浪潮的推动下&#xff0c;众多企业正积极探索线上3D虚拟展厅这一新型展示平台&#xff0c;旨在以更加生动、直观的方式呈现其产品、环境与综合实力。然而&#xff0c;构建一个既专业又吸引人的3D虚拟展厅并非易事&#xff0c;它不仅需要深厚的技术支持&#xff0c;还需…...

github汉化

本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github&#xff0c;搜索github-chinese2.打开项目&#xff0c;打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动&#xff0c;找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…...

Unity Line Renderer Component入门

Overview Line Renderer 组件是 Unity 中用于绘制连续线段的工具。它通过在三维空间中的两个或两个以上的点的数组&#xff0c;并在每个点之间绘制一条直线。可以绘制从简单的直线到复杂的螺旋线等各种图形。 1. 连续性和独立线条 连续性&#xff1a;Line Renderer 绘制的线条…...

数据库的三级模式结构与两级映像

三级模式结构与两级映像 什么是数据库的三级模式结构&#xff1f;1. 模式&#xff08;Conceptual Schema&#xff0c;概念模式&#xff09;定义特点作用示例 2. 外模式&#xff08;External Schema&#xff0c;外部模式&#xff09;定义特点作用举例 3. 内模式&#xff08;Inte…...

TCP断开通信前的四次挥手(为啥不是三次?)

1.四次握手的过程 客户端A发送 FIN&#xff08;终止连接请求&#xff09; A&#xff1a;我要断开连接了&#xff08;FIN&#xff09;。A进入FIN_WAIT_1状态&#xff0c;表示请求断开&#xff0c;等待对方确认。 服务器B回复 ACK&#xff08;确认断开请求&#xff0c;但还未准备…...

win32汇编环境,按字节、双字等复制字符的操作

;运行效果 ;win32汇编环境,按字节、双字等复制字符的操作 ;这是汇编的优点之一。我们可以按字节、双字、四字、八字节等复制或挨个检查字符。 ;有时候&#xff0c;在接收到的一串信息中&#xff0c;比如访问网站时&#xff0c;返回的字串里&#xff0c;有很多0值存在&#xff0…...

.net 项目引用与 .NET Framework 项目引用之间的区别和相同

在 .NET 和 .NET Framework 项目中&#xff0c;引用其他库或项目的方式有一些区别和相同之处。以下是详细的对比&#xff1a; 相同点 引用目的&#xff1a; 目的&#xff1a;无论是 .NET 还是 .NET Framework 项目&#xff0c;引用其他库或项目的主要目的是为了使用这些库或项…...

RabbitMQ--延迟队列

&#xff08;一&#xff09;延迟队列 1.概念 延迟队列是一种特殊的队列&#xff0c;消息被发送后&#xff0c;消费者并不会立刻拿到消息&#xff0c;而是等待一段时间后&#xff0c;消费者才可以从这个队列中拿到消息进行消费 2.应用场景 延迟队列的应用场景很多&#xff0c;…...

使用pyboard、micropython和tja1050进行can通信

单片机和can收发器之间tx、rx不需要交叉接线&#xff01;&#xff01;&#xff01; tja1050的rx接Y3、tx接Y4 from pyb import CANcan CAN(1) can.init(modecan.NORMAL, prescaler6, sjw1, bs14, bs22, auto_restartTrue) # 1Mbps的配置&#xff0c;本文使用的micropython1.…...

JS学习之JavaScript模块化规范进化论

前言 JavaScript 语言诞生至今&#xff0c;模块规范化之路曲曲折折。 前言 JavaScript 语言诞生至今&#xff0c;模块规范化之路曲曲折折。社区先后出现了各种解决方案&#xff0c;包括 AMD、CMD、CommonJS 等&#xff0c;而后 ECMA 组织在 JavaScript 语言标准层面&#xff0…...

亚博microros小车-原生ubuntu支持系列:7-脸部检测

背景知识 官网介绍&#xff1a; Face Mesh - mediapipe mpFaceMesh.FaceMesh() 类的参数有&#xff1a;self.staticMode, self.maxFaces, self.minDetectionCon, self.minTrackCon staticMode:是否将每帧图像作为静态图像处理。如果为 True&#xff0c;每帧都会进行人脸检测…...

第二届国赛铁三wp

第二届国赛 缺东西去我blog找&#x1f447; 第二届长城杯/铁三 | DDLS BLOG web Safe_Proxy 源码题目 from flask import Flask, request, render_template_stringimport socketimport threadingimport htmlapp Flask(__name__)app.route(/, methods"GET"])de…...

缓存商品、购物车(day07)

缓存菜品 问题说明 问题说明&#xff1a;用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大。 结果&#xff1a; 系统响应慢、用户体验差 实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询…...

4【编程语言的鄙视链原因解析】

在编程行业中&#xff0c;是存在鄙视链的&#xff0c;技术越好的圈子越不明显&#xff0c;技术越差的圈子越明显&#xff0c;很多时候为新人营造了错误的观点&#xff0c;我们来针对此类现象为新人们讲解原因 ①心里落差&#xff1a;比如你是学厨师的 你经过过年努力练…...

美团一面面经

第一个问题&#xff1a;介绍一下最近做的项目 第二个问题&#xff1a;我对你项目有个地方比较感兴趣啊。就是你用的那个二级缓存&#xff0c;你的吞吐量有多大啊&#xff0c;为什么需要使用二级缓存&#xff1f; 答&#xff1a; 在二级缓存策略下&#xff0c;笔记详情接口的吞…...

什么是报文的大端和小端,有没有什么记忆口诀?

在计算机科学中&#xff0c;**大端&#xff08;Big-Endian&#xff09;和小端&#xff08;Little-Endian&#xff09;**是两种不同的字节序&#xff08;即多字节数据在内存中的存储顺序&#xff09;。理解这两种字节序对于网络通信、文件格式解析以及跨平台编程等非常重要。 1…...

Spring中BeanFactory和ApplicationContext的区别

目录 一、功能范围 二、Bean的加载时机 三、国际化支持 四、事件发布 五、资源加载 六、使用场景说明 在Spring框架中&#xff0c;BeanFactory和ApplicationContext是两种常见的容器实现方式&#xff0c;它们在功能和使用场景上存在一些显著的差异。本文将详细解析这两种容…...

yaml-cpp终极内存优化指南:5个提升缓存命中率的实现技巧

yaml-cpp终极内存优化指南&#xff1a;5个提升缓存命中率的实现技巧 【免费下载链接】yaml-cpp A YAML parser and emitter in C 项目地址: https://gitcode.com/gh_mirrors/ya/yaml-cpp yaml-cpp是一个高性能的C YAML解析器和发射器&#xff0c;完全遵循YAML 1.2规范。…...

【ESP32-S3 深度实战】从小智AI底层移植到自定义LVGL表情:M5Stack CoreS3 避坑与架构指南

大家好&#xff0c;这里是企鹅的蚂蚁&#xff01; 继上一篇打通了 M5Stack CoreS3 的 LVGL 模拟器与全双工音频后&#xff0c;最近我又开启了一项“硬核战役”&#xff1a;尝试将目前非常火的“小智 AI”底层框架移植进 CoreS3&#xff0c;并且完全弃用它原生的 UI&#xff0c…...

脚手架封装

为什么要做脚手架&#xff1f; 统一项目规范&#xff0c;用脚手架强制统一&#xff1a;结构、规范、依赖、代码风格 提升开发效率&#xff0c;节省大量时间。新建项目不用手动配&#xff1a;路由、请求封装、环境变量、Eslint、Prettier 降低新员工上手成本&#xff0c;新人不用…...

已过期域名对SEO优化有什么影响

已过期域名对SEO优化有什么影响 在当今数字化时代&#xff0c;网站的搜索引擎优化&#xff08;SEO&#xff09;对于吸引流量和提升品牌知名度至关重要。域名作为网站的身份标志&#xff0c;其质量和历史往往对SEO有着深远影响。本文将探讨已过期域名对SEO优化有什么影响&#…...

二、PXE+Kickstart 无人值守批量部署操作系统;使用物理路由器的dhcp:ProxyDHCP+TFTP+HTTP+Kickstart应答文件(VMware测试环境)

前文不使用物理设备的 DHCP &#xff0c;选择自行安装 DHCP 服务进行的PXEKickstart 无人值守部署操作系统的方法难以适用于家庭或企业环境&#xff0c;本文尝试一种使用物理设备&#xff08;家庭路由器、企业交换机&#xff09;的DHCP功能批量部署物理机操作系统的方案。 建议…...

快速验证抓取逻辑:在快马平台用AI十分钟搭建龙虾openclaw演示原型

最近在研究机器人抓取控制相关的技术&#xff0c;偶然发现了龙虾openclaw这个开源库&#xff0c;想快速验证下它的抓取逻辑。传统开发流程需要先搭建环境、写大量样板代码&#xff0c;但借助InsCode(快马)平台&#xff0c;整个过程变得异常简单。下面分享我的十分钟原型搭建经验…...

文献自由:ScienceDecrypting破解加密PDF的技术突破与价值重构

文献自由&#xff1a;ScienceDecrypting破解加密PDF的技术突破与价值重构 【免费下载链接】ScienceDecrypting 破解CAJViewer带有效期的文档&#xff0c;支持破解科学文库、标准全文数据库下载的文档。无损破解&#xff0c;保留文字和目录&#xff0c;解除有效期限制。 项目地…...

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 - 代码漏洞扫描工具 | 静态代码测试 | 代码安全分析 请访问原文链接&#xff1a;https://sysin.org/blog/opentext-sast/ 查看…...

PromptSource与环保科技NLP:环境数据分析的提示工程指南

PromptSource与环保科技NLP&#xff1a;环境数据分析的提示工程指南 【免费下载链接】promptsource Toolkit for creating, sharing and using natural language prompts. 项目地址: https://gitcode.com/gh_mirrors/pr/promptsource 在当今环保科技领域&#xff0c;自然…...

重磅更新!Pydantic AI 引入在线 Eval 与 MCP 控制,Agent 落地难的问题正在被解决

Agent 开发进入“深水区”&#xff1a;pydantic-ai v1.74.0 释放了什么信号&#xff1f;在 AI 应用开发的圈子里&#xff0c;一直存在一个尴尬的现象&#xff1a;写一个能跑的 Chatbot Demo 只需要一下午&#xff0c;但要把这个 Demo 变成稳定可靠的生产级应用&#xff0c;可能…...