利用哈希表实现数据查找
来源:互联网 发布:js 两个时间相减 编辑:程序博客网 时间:2024/06/15 22:25
题目:现在有一个用来存放整数的Hash表,Hash表的存储单位称为桶,每个桶能放3个整数,当一个桶中要放的元素超过3个时,则要将新的元素存放在溢出桶中,每个溢出桶也能放3个元素,多个溢出桶使用链表串起来。此Hash表的基桶数目为素数P,Hash表的hash函数对P取模。#include<iostream>using namespace std;#define P 7#define NULL_DATA -1#define BUCKET_NODE_SIZE 3struct bucket_node{int data[BUCKET_NODE_SIZE];struct bucket_node *next;};bucket_node hash_table[P];void InitHashTable(bucket_node(*ht)[P]){for(int i=0; i<P; ++i){for(int j=0; j<BUCKET_NODE_SIZE; ++j){(*ht)[i].data[j] = NULL_DATA;}(*ht)[i].next = NULL;}}int Hash(int X){return X % P;}void insert_new_element(bucket_node(*ht)[P], int x){int index = Hash(x);for (int i = 0; i < BUCKET_NODE_SIZE; i++){if ((*ht)[index].data[i] == NULL_DATA){(*ht)[index].data[i] = x;return;}}bucket_node *s = new bucket_node;s = (*ht)[index].next;bucket_node *p = &(*ht)[index];while(s != NULL){for(int i = 0; i < BUCKET_NODE_SIZE; i++){if (s->data[i] == NULL_DATA){s->data[i] = x;//(*ht)[index] = *s;return;}}p = s;s = s->next; }s=new bucket_node;p->next= s;for(int j = 0; j<BUCKET_NODE_SIZE; ++j){s->data[j] = NULL_DATA;} s->next = NULL;for (int i = 0; i < BUCKET_NODE_SIZE;i++)if (s->data[i] == NULL_DATA){s->data[i] = x;return;}}void main(){InitHashTable(&hash_table);int ar[] = {8,15,22,29,36,43,50,7,14,21,28,35,42,49,56,63,70,25,30};for(int i=0; i<sizeof(ar)/sizeof(int); ++i){insert_new_element(&hash_table,ar[i]);}}
0 0
- 利用哈希表实现数据查找
- 利用函数查找数据
- 利用二分查找法查找数据
- 利用位图查找大数据
- 利用jquery实现查找节点
- 利用递归实现折半查找
- 查找与排序:利用基数排序对0~100范围内数据实现排序
- 利用二分法查找数据中的字串JAVA
- 【数据挖掘】利用md5查找重复文件
- C单链表实现数据查找
- c语言利用递归实现二分查找
- 利用C语言实现折半查找
- 利用函数bin_search实现折半查找
- 利用java实现非递归二分查找
- java利用关键字实现查找文件
- 利用复制实现数据同步
- 利用触发器实现数据同步
- 利用触发器实现数据同步
- TS流解析之PAT表格解析
- C++ Primer 学习笔记与思考_3 ---头文件那些事儿(extern)
- 单链表之删除某一位置节点
- TS流解析之PMT表格解析
- NC - 网络编码的Java实现(1)-GF28基本运算
- 利用哈希表实现数据查找
- android Graphics(一):概述及基本几何图形绘制
- 使用storyboard,设置系统自带的tabbar的选中状态,未选中状态
- Linux+Apache+DB2+PHP环境配置
- Standard C 语言标准函数库(ANSI C)
- 微信内置浏览器submit函数无效的问题
- list、set、map的总结
- Git pull、 push 操作无需输密码的方法
- 观察者模式