目录

题目描述

思路分析

AC代码


题目描述

给出一个数据序列,建立哈希表,采用求余法作为哈希函数,模数为11,哈希冲突用链地址法和表尾插入

如果首次查找失败,就把数据插入到相应的位置中

实现哈希查找与增补功能

输入

第一行输入n,表示有n个数据
第二行输入n个数据,都是自然数且互不相同,数据之间用空格隔开
第三行输入t,表示要查找t个数据
从第四行起,每行输入一个要查找的数据,都是正整数

输出

每行输出对应数据的查找结果,每个结果表示为数据所在位置[0,11)和查找次数,中间用空格分开

输入样例

6
11 23 39 48 75 62
6
39
52
52
63
63
52

输出样例

6 1
error
8 1
error
8 2
8 1

思路分析

建立哈希表,哈希冲突用链地址法和表尾插入。那么要建立一个指针数组,要是该地址有数据,就指向结点,若没有数据就是NULL;也就是有很多个不带头结点的单链表。利用哈希函数计算出地址,创建新的结点,然后把结点插入就好。这里是不带头结点的尾插法,判断指针是否为NULL,是为NULL就让指针指向结点;不为NULL就一直循环指向下一个,直到找到NULL为止。

AC代码

#include<iostream>
using namespace std;
int hashh(int key){return key%11;
}
class node{public:int key;node *next;node(){    }node(int n,node *p):key(n),next(p){}~node(){}
};
class hashTab{public:node * shuzu[100];hashTab(int m){for(int i=0;i<m;i++)shuzu[i]=NULL;}void insert(node *a,int i)   //尾插法 {    node *p;p=shuzu[i];if(p==NULL){shuzu[i]=a;return ;} while(1){if(p->next==NULL){p->next=a;return ;} p=p->next;}} int serach(int key){int i=hashh(key);int sum=0;node *p;p=shuzu[i];while(1){sum++;if(p==NULL) return 0;else {if(p->key==key) return sum;p=p->next;}} }};
int main(){int t,m,n,k,key;cin>>n;
//  node *[11];//设表长为11 hashTab tab(11);while(n--){cin>>key;int index=hashh(key);node *a=new node(key,NULL); tab.insert(a,index);}cin>>t;while(t--){cin>>key;int sum=tab.serach(key);if(sum==0){cout<<"error"<<endl;node *s=new node(key,NULL);tab.insert(s,hashh(key));}else cout<<hashh(key)<<" "<<sum<<endl;}return 0;
}

D. DS哈希查找与增补(表尾插入)相关推荐

  1. 折半查找和线性表的插入与删除实验

    学号                     姓名                   博客名 2103101018         罗玛                   桃花岛-戌时 题目:折半 ...

  2. ds哈希查找—二次探测再散列_大白话之哈希表和哈希算法

    哈希表概念 哈希表(散列表),是基于关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数(哈希函数 ...

  3. DS哈希查找--Trie树

    题目描述 Trie树又称单词查找树,是一种树形结构,如下图所示. 它是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点 ...

  4. m数据结构 day5 栈:后进先出,只能在表尾插入和删除的线性表

    文章目录 现实应用举例(只要用了先进后出,后进先出思想的都是栈的示例) 栈的抽象数据类型 顺序栈:栈的顺序存储结构,用数组实现 进栈:O(1) 出栈:O(1) 两个同数据类型的栈共享空间:缓解数组长度 ...

  5. 考研数据结构之查找(9.8)——练习题之编写一个函数利用二分查找算法在一个有序表中插入关键字k并保持表的有序性(C表示)

    题目 编写一个函数,利用二分查找算法在一个有序表中插入一个关键字k,并保持表的有序性. 分析 先在有序表中利用二分查找算法查找关键字值等于或小于k的结点,m指向正好等于k的结点或l指向关键字正好大于k ...

  6. java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)

    1.线性表的定义: (1).线性表是一种可以在任意位置插入和删除数据元素操作.由n(n≥0)个相同类型数据元素a0, a1,-, an-1组成的线性结构.除了第一个元素没有前驱元素和最后一个元素没有后 ...

  7. Re:从零开始的DS学习之查找算法

    Re:从零开始的DS学习 考研专业课满分大佬是怎么学习查找算法的,本文从顺序查找->二分查找>hash查找->BST树->优先队列->堆,帮你打开查找算法的新世纪,深入浅 ...

  8. python实现顺序查找和哈希查找

    顺序查找非常简单,只是个开胃菜,今天主要练习的是哈希查找 先上顺序查找代码: def sequence_search(array, num):for i in range(len(array)):if ...

  9. 【数据结构笔记】B树和B+树的实现,哈希查找,STL中的hash_map和unordered_map容器用法

    B和B+树 哈希查找 用开放定址法解决哈希冲突的哈希查找算法 链地址法: 利用哈希表查找一个字符串中第一个只出现一次的字符 hash_map和unordered_map 设计算法删除重复的元素 设计算 ...

最新文章

  1. Python第三章-字符串
  2. Sparkmllib scala svm demo
  3. Nhibernate配置和访问数据问题
  4. c语言 各种变量的寻址方式,计算机组成原理常见题(四)
  5. vue的token刷新处理
  6. 终于……我的游戏………简体版就要发布了!
  7. 孔夫子告诉你:编程到底能教会你什么!
  8. 联发科发布天玑9000移动平台 4nm制程 Armv9架构
  9. 基于freemarker生成pdf
  10. Office2021 安装MathType
  11. kafka从入门到精通:马士兵java集合
  12. warning no match for this type name:xxx.xxx.xxx [Xlint:invalidAbsoluteTypeName]
  13. oracle erp和金蝶,ERP和金蝶软件有什么区别!
  14. 2014多校联合-第八场
  15. 孟德尔随机化,异质性Heterogeneity statistics
  16. HTML基础学习笔记(1)
  17. kafka tool数据乱码
  18. php配置本地一个新的虚拟主机
  19. 四十岁是科学家的黄金年龄 我还有机会
  20. 计算机操作系统引论(操作系统)

热门文章

  1. SAP ABAP 业务对象 BUS1138 StatisticKeyFigureCO CO 统计指数 BAPI 清单和相关 TCODE
  2. go每日新闻(2021-05-21)——细谈Go变量的内存分布
  3. C语言数据结构学习(4):静态链表
  4. 可编辑属性html,contenteditable
  5. http 302重定向 java_重定向 302 与localhost 学习笔记
  6. 中国房地产数字化厂商全景报告
  7. 最近闲话比较多了, 应该消停点~
  8. 用方框图来表示指令周期
  9. 使用phpoffice/phpword读取word内容
  10. jquery1.4.4 ajax在页面关闭时无法abort,jquery ajax abort()的使用方法