当前位置: 首页 > 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;它们在功能和使用场景上存在一些显著的差异。本文将详细解析这两种容…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...