查找的数据结构实验报告(哈希表)

目录

一、实验目的:

二、实验内容(实验题目与说明)

三、算法设计(核心代码或全部代码)

四、运行与测试(测试数据和实验结果分析)

五、总结与心得


一、实验目的:

(1)理解查找表的基本概念,定义、 分类和各类的特点;

(2)掌握哈希表的构造方法以及解冲突的方法;

(3)掌握哈希存储和哈希查找的基本思想及有关方法。

二、实验内容(实验题目与说明)

使用哈希函数:H(K)=3K MOD 11

并采用链地址法处理冲突。试对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,设计构造哈希表的完整算法去。

三、算法设计(核心代码或全部代码)

#include <stdio.h>

#include <stdlib.h>

#define MAX_SIZE 11

typedef struct Node {

    int key;

    struct Node* next;

} Node;

 

typedef struct HashTable {

    Node** data;

    int size;

} HashTable;

 

HashTable* initHashTable(int size) {

    HashTable* hashTable = (HashTable*)malloc(sizeof(HashTable));

    hashTable->size = size;

    hashTable->data = (Node**)malloc(sizeof(Node*) * size);

    for (int i = 0; i < size; i++) {

        hashTable->data[i] = NULL;

    }

    return hashTable;

}

 

// 计算哈希值

int hash(int key) {

    return 3 * key % MAX_SIZE;

}

 

// 向哈希表中插入关键字

void insert(HashTable* hashTable, int key) {

    int position = hash(key); // 计算哈希值

    Node* node = (Node*)malloc(sizeof(Node)); // 创建新节点

    node->key = key;

    node->next = NULL;

 

    if (hashTable->data[position] == NULL) { // 插入新节点

        hashTable->data[position] = node;

    } else {

        Node* p = hashTable->data[position];

        while (p->next != NULL) {

            p = p->next;

        }

        p->next = node;

    }

}

 

// 在哈希表中查找关键字

int search(HashTable* hashTable, int key) {

    int position = hash(key); // 计算哈希值

    Node* p = hashTable->data[position];

    while (p != NULL) { // 遍历链表

        if (p->key == key) {

            return position; // 返回位置

        }

        p = p->next;

    }

    return -1; // 没有找到返回-1

}

 

int main() {

    int keys[] = {22, 41, 53, 46, 30, 13, 1, 67};

    int size = sizeof(keys) / sizeof(int);

 

    // 构造哈希表

    HashTable* hashTable = initHashTable(MAX_SIZE);

    for (int i = 0; i < size; i++) {

        insert(hashTable, keys[i]);

    }

 

    // 查找关键字

    printf("输入要查找的关键字: ");

    int key;

    scanf("%d", &key);

    int position = search(hashTable, key);

    if (position == -1) {

        printf("没有找到该关键字\n");

    } else {

        printf("该关键字在哈希表中的位置为: %d\n", position);

    }

 

    return 0;

}

 

四、运行与测试(测试数据和实验结果分析

c9956a76272e4a3a913ee7fd0172be5c.png

ccee2577052c45d08705e1aef1ebeb98.png 

先定义了哈希节点结构体 Node 和哈希表结构体 HashTable。然后使用 initHashTable 函数初始化哈希表,并使用 hash 函数计算哈希值。使用 insert 函数向哈希表中插入关键字,并使用 search 函数在哈希表中查找关键字。最后,我们在 main 函数中构造哈希表并进行关键字查找。

五、总结与心得

  学习了哈希表的基本原理和实现方法。通过使用哈希函数将关键字映射到固定位置上,并采用链地址法解决冲突问题,哈希表可以实现高效的数据插入和查找操作。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/299095.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows 查看所有端口占用情况

winR&#xff0c;调出cmd窗口&#xff1a; 输入命令 netstat -ano 内容太多&#xff0c;显示不全&#xff0c;怎么办? 输入下面命令 netstat -ano > d:\1.log 在d盘根目录下就产生了 输出文件 打开可以看到如下内容 活动连接协议 本地地址 外部地址 状…

小家电type-c接口PD诱骗

小家电Type-C接口PD诱骗&#xff1a;未来充电的便捷与安全 随着科技的不断发展&#xff0c;Type-C接口已经成为了许多小家电产品的标配。而PD&#xff08;Power Delivery&#xff09;诱骗技术&#xff0c;作为一种新兴的充电技术&#xff0c;更是为小家电产品的充电带来了前所…

密码学入门 古老的围栏密码技术

1、简述 由于隐私和安全的重要性不断增加&#xff0c;已经开发了多种加密方法和技术来保护我们的敏感数据。随着时间的推移而演变&#xff0c;从经典密码学发展到现代密码学。 在本文中&#xff0c;我们将了解一种被称为围栏密码技术的技术&#xff0c;涵盖其加密和解密过程及其…

【IC设计】移位寄存器

目录 理论讲解背景介绍什么是移位寄存器按工作模式分类verilog语法注意事项 设计实例循环移位寄存器算术双向移位寄存器5位线性反馈移位寄存器伪随机码发生器3位线性反馈移位寄存器32位线性反馈移位寄存器串行移位寄存器&#xff08;打4拍&#xff09;双向移位寄存器&#xff1…

Java研学-web操作crud

一 思路 1 组件 页面显示&#xff1a;JSP   接受用户请求&#xff1a;Servlet   和数据库交互&#xff1a;MyBatis 2 基础准备 ① 创建 web 项目&#xff0c;导入需要依赖的 jar 包,放入 web/WEB-INF/lib目录中 ② 创建数据库表 CREATE TABLE employee( id bigint(11)…

八大算法排序@归并排序(C语言版本)

目录 归并排序概念算法思想第一步第二步第三步 算法步骤代码实现代码1代码优化 时间复杂度空间复杂度特性总结 归并排序 概念 归并排序&#xff08;Merge Sort&#xff09;是一种基于分治策略的经典排序算法。它的基本思想是将待排序的数组划分成两个子数组&#xff0c;分别对…

响应式布局 Bootstrap

响应式开发 原理&#xff1a;就是根据媒体查询针对不同宽度的设备进行布局和样式的设置&#xff0c;从而适配不同设备的目的。 响应式需要一个父级做为布局容器&#xff0c;来配合子级元素来实现变化效果。 原理&#xff1a;就是在不同屏幕下&#xff0c;通过媒体查询来改变这…

基于Python+Django,开发一款房屋租赁系统

学习文档 学习过程中&#xff0c;遇到问题可以咨询作者 功能介绍 平台采用B/S结构&#xff0c;后端采用主流的PythonDjango进行开发&#xff0c;前端采用主流的Vue.js进行开发。 整个平台包括前台和后台两个部分。 前台功能包括&#xff1a;首页、房屋详情页、用户中心模块。…

[java]JAVA中文版API手册 -jdk_api_1.8

有mac和win版本 链接&#xff1a;https://pan.baidu.com/s/14WGXJYBICeSxgg6OxBVGRQ 提取码&#xff1a;c03p

【总线接口】1.以Xilinx开发板为例,直观的认识硬件板卡和接口

初接触硬件&#xff0c;五花八门的总线、接口一定会让你有些疑惑&#xff0c;我尝试用一系列文章来解开你的疑惑 系列文章 【总线接口】1.以Xilinx开发板为例&#xff0c;直观的认识硬件接口 【总线接口】2.学习硬件这些年接触过的硬件接口、总线 大汇总 【总线接口】…

C# Unity将地形(Terrain)导出成obj文件

C# Unity将地形(Terrain)导出成obj文件 从其他地方搬运过来的&#xff0c;只能到出obj模型&#xff0c;不能导出贴图 using System.IO; using System.Text; using UnityEditor; using UnityEngine; using System;enum SaveFormat { Triangles, Quads } enum SaveResolution {…

《计算机科学中的建模技术》复习点

0 考试题型 题型&#xff1a;选择、填空、大题&#xff08;综合题&#xff09; 分值&#xff1a;选择填空30分&#xff0c;综合70分 填空&#xff1a;基本概念题 第 1 章&#xff1a;计算机科学基本问题与数学建模概要 1.1 科学计算的基本概念 科学计算是指利用计算机来完成…

Java二分查找冒泡排序插入排序

二分查找 又叫折半查找&#xff0c;要求待查找的序列有序。每次取中间位置的值与待查关键字比较&#xff0c;如果中间位置的值比待查关键字大&#xff0c;则在前半部分循环这个查找的过程&#xff0c;如果中间位置的值比待查关键字小&#xff0c;则在后半部分循环这个查找的过程…

【占用网络】VoxFormer 基于视觉的3D语义场景方案 CVPR 2023

前言 本文分享“占用网络”方案中&#xff0c;来自CVPR2023的VoxFormer&#xff0c;它基于视觉实现3D语义场景补全。 使用Deformable Attention从图像数据中&#xff0c;预测三维空间中的体素占用情况和类别信息。 VoxFromer是一个两阶段的框架&#xff1a; 第一个阶段&…

TypeScript 从入门到进阶之基础篇(四) symbol类型篇

系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇 持续更新中… 文章目录 …

mysql之视图执行计划

一.视图 1.1视图简介 1.2 创建视图 1.3视图的修改 1.4视图的删除 1.5查看视图 二.连接查询案例 三.思维导图 一.视图 1.1视图简介 虚拟表&#xff0c;和普通表一样使用 MySQL中的视图&#xff08;View&#xff09;是一个虚拟表&#xff0c;其内容由查询定义。与实际表不…

解决 POST http://x.x.x.x:8000/aaa/ net::ERR_CONNECTION_TIMED_OUT

记录一下我遇到的问题和解决办法 我的项目前后端分离&#xff0c;在前端用的vue访问后端时连接不上后端&#xff0c;一切操作都触发不了后端&#xff0c;数据也传不到后端去&#xff1b; 原因&#xff1a;url有问题&#xff0c;url地址写的不是本机&#xff0c;所以导致连接超…

OpenCV的安装和vscode的配置

在图像处理领域&#xff0c;OpenCV的使用是必不可少的&#xff0c;这里介绍一下OpenCV的安装及其在vscode中的配置 1.OpenCV的安装 &#xff08;1&#xff09;安装依赖 sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavc…

vue2中vuex详细使用

1.安装 说明&#xff1a;也就是版本号&#xff0c;一般vue2安装vuex3。 npm i vuex3.6.2 2.搭建架子 执行流程如下&#xff1a; 初始化状态&#xff1a;在state对象中定义了一个名为message的属性&#xff0c;并将其初始值设置为"启动"。 定义变更函数&#xff08…