利用哈希表实现数据查找

题目:现在有一个用来存放整数的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 3

struct 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]);
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-16 03:05:20

利用哈希表实现数据查找的相关文章

数据结构之哈希表实现浅析

看了下JAVA里面有HashMap.Hashtable.HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和HashMap.Hashtable的区别 HashMap和Hashtable的实现原理 HashMap的简化实现MyHashMap HashMap和Hashtable的区别 两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全Hashtable的实现方法里面都添加了synchron

用哈希表实现图书管理系统

学校Java课的课程实验之一. 用到的数据结构:哈希表 题目要求: 1. 建立的图书类包含如下信息:编号.书名.作者.出版社.出版日期. 2. 能够实现根据以下关键字查询图书:编号.书名.作者.出版社. 3. 能够实现图书信息的录入.删除和修改. 4.录入的图书至少要有10本以上. 5.具有图形用户界面. 功能介绍: 录入.删除.修改图书: 按编号.书名.作者.出版社查询图书. 界面设计: 主界面(会的不多,所以用了最简易的流式布局): 检索模块: 从四个检索字段中选择一种,输入检索词,点击“检

DropDownList绑定数据表实现两级联动示例

这篇文章主要介绍了DropDownList绑定数据表实现两级联动具体实现,需要的朋友可以参考下 场景一:平时我们在DropDownList控件下添加下拉选项时,都会使用它的Item.Add方法,直接在代码下添加.如果我们想添加或修改下拉选项,则必须去修改源代码.如果几个DropDownList控件的下拉选项相同,我们则需要重复添加好多次,后期的维护工作很不方便. 场景二:我们在12306网站买票时,肯定遇到过这么一种情景:我们需要先选定目的地的省份,选完省份后在城市选框中会自动加载该省份的城市,

[转]mysql 从一个表中查数据并插入另一个表实现方法

不管是在网站开发还是在应用程序开发中,我们经常会碰到需要将MySQL或MS SQLServer某个表的数据批量导入到另一个表的情况,甚至有时还需要指定导入字段. 本文就将以MySQL数据库为例,介绍如何通过SQL命令行将某个表的所有数据或指定字段的数据,导入到目标表 中.此方法对于SQLServer数据库,也就是T-SQL来说,同样适用 . 类别一. 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源

[PHP]利用XAMPP搭建本地服务器, 然后利用iOS客户端上传数据到本地服务器中(三. PHP端代码实现)

一.安装XAMPP   http://www.cnblogs.com/lidongxu/p/5256330.html 二. 配置MySql http://www.cnblogs.com/lidongxu/p/5256515.html 然后呢, 今天我们就来接触下PHP开发语言 1. 首先呢, 需要在我们本机服务器文件夹资源下新建个.php文件,   废话嘛(你要写php啦!) 2. 在register.php 输入以下代码 <?php // 1. 获取客户端利用post方式网络请求的body里的

SQL SERVER 2014--内存表实现秒杀场景

===================================== 网上针对“秒杀”的解决方案很多,数据拆分化解热点,READPASH解决锁问题,应用程序排队限制并发等等很多方式,各有优缺点,只为证明一句名言:条条大路通罗马. ===================================== 今天拿SQL SERVER 2014的内存表来试水“秒杀”,内存表使用“版本”解决了高并发下锁请求和阻塞的问题,使用HASH索引来处理数据页“热点”的问题,解决了PAGE_LATCH等待,

用顺序表实现一个循环队列

队列是一种先进先出的线性表,简称FIFO.允许插入的一端为队尾,允许出列的一端为队头. 比如一个队列q=(p1,p2,p3,p4...pn),p1就是那个队头,pn就是队尾.出列时总是从p1开始 向后,入列时总是从pn后面插入.就像敲键盘,依次敲qwr,屏幕上显示的就是qwr,先敲的先显 示. 以下代码是用顺序表实现一个循环队列 1 /** 2 * @filename queue.c 3 * @author haohaibo 4 * @data 2017/4/12 5 * @brief 用顺序表

[原创]利用爬虫技术获取网页数据,以及想要的指定数据

最近在公司做个系统,由于要获取网页的一些数据,以及一些网页的数据,所以就写的一个公用的HttpUtils.下面是针对乌云网我写的一个例子. 一.首先是获取指定路径下的网页内容. public static String httpGet(String urlStr, Map<String, String> params) throws Exception { StringBuilder sb = new StringBuilder(); if (null != params &&

DS之顺序表实现乱序输入顺序输出

顺序表的实例有很多,在学其他的编程语言时,肯定都学过要求输入一串乱序的数字,要求进行排序,实现升序或降序输出.今天就来用顺序表实现乱序输入,顺序输出(升序). 实现上述的功能需要用到的顺序表的基本操作有0基本操作前的准备,1初始化顺序表,6向顺序表插入数据元素. 自己只需写一个排序的函数,排序函数的代码为: <span style="font-size:18px;">//排序函数 void paixu(SqList &L) { for(int i=0;i<L.