简单的哈希表映射试验

对于很长的线性数据结构,进行搜索,可以用哈希表的方式。

#include <iostream>
#include <stdio.h>

using namespace std;

//数据类型
//注意:每一个数据节点,须绑定一个唯一的Key值
//这一点可以简单理解为:如果是工人信息,可以使用工号;学生信息,可以用学号
//设备信息,可以用设备编号
struct info
{
    int id;
    char name[10];
};

info data[10]={0};//存储数据

//存入数据
void SetData(int key,const info& value)
{
    int index = key % 10;//简单的散列算法,此处没有避免重复值
    data[index] = value;
}

//查找数据
info find(int key)
{
    int index = key % 10;
    return data[index];
}

int main(int argc, char* argv[])
{
    info a={1001,"张三"};
    SetData(a.id,a);

    info b={1002,"李四"};
    SetData(b.id,b);

    info c = find(1002);
    cout << c.id << ":" << c.name <<endl;

    //一般的数组查询方法
    //    for(int i=0;i<10;i++)
    //    {
    //        if(data[i].id == 1002)
    //        {
    //            cout << c.id << ":" << c.name <<endl;
    //        }
    //    }

    getchar();
    return 0;
}

哈希表的优势在于查找时,一次命中目录。而传统的数组或链表查找,需要从头到尾遍历一次。

时间: 2024-10-23 01:36:06

简单的哈希表映射试验的相关文章

简单的哈希表实现 C语言

简单的哈希表实现 简单的哈希表实现 原理 哈希表和节点数据结构的定义 初始化和释放哈希表 哈希散列算法 辅助函数strDup 哈希表的插入和修改 哈希表中查找 哈希表元素的移除 哈希表打印 测试一下 这是一个简单的哈希表的实现,用c语言做的. 原理 先说一下原理. 先是有一个bucket数组,也就是所谓的桶. 哈希表的特点就是数据与其在表中的位置存在相关性,也就是有关系的,通过数据应该可以计算出其位置. 这个哈希表是用于存储一些键值对(key -- value)关系的数据,其key也就是其在表中

leetcode #1 twoSum问题:简单实用哈希表

因为不是计算机专业的,算法基础有点差,所以最近开始在leetcode上刷刷题补一补. #1 问题链接:twoSum 问题描述: Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the

建立简单的哈希表

#include<stdio.h> #include <stdlib.h> unsigned int SDBMHash(char *str) { unsigned int hash = 0; while (*str) { // equivalent to: hash = 65599*hash + (*str++); hash = (*str++) + (hash << 6) + (hash << 16) - hash; } return (hash &

映射的应用:哈希表,多维哈希表,多级映射实现字典

看了标题之后你会发现原来映射的功能竟然如此强劲 我们通常所用的map其实就是一棵红黑树,如果有平衡树问题能够用它来解决一定要用,不要手写了,因为红黑树的效率是非常棒的 先看几个定义: map<string,int> m1; map<string,map<string,int> >m2; multiset<string> s1; multimap<string,string> m3; 其中m1就是一个关联数组,为了模拟普通哈希表 (这里的所有的都是

【算法导论】简单哈希表的除法实现

哈希表,又名散列表,hashtable...云云,看似很高大上,其实不过是直接寻址的延伸而已.直接寻址为何物,看一个数组:a[10],那么取其中一个元素a[1],这就是直接寻址,直接去这个a+1的地址上,就找到了这个数值,时间复杂度为O(1).而哈希表的目的就是要让查找的时间复杂度尽量往O(1)上靠. 一.哈希表的最简单形式 假如有10000个数,比如0~9999,是可能出现的数字的集合,我们现在要将一段时间内,出现的数字,全部保存起来.如果出现的数字都不重复的情况下,我们可以使用一个长度为10

哈希表的静态,动态,以及key/value形式

哈希是一种算法,将指定的数据按一定规律映射到一段空间内,又可以按照这种规律对它的值进行相应的操作,这一段空间可以称作哈希表,它的的查找速度要快于线性的数据结构,同时也快于表格队列等,所以它具有独特的优势,一般将哈希算法用于快速查找和加密算法. 对于最简单的哈希表,里面设置一个key,它决定将这个值存于哈希表的什么位置,同时把每个设置一个状态,如果有插入数据就将其设置为EXITS,其他操作同理,现在可以实现最简单的哈希表. namespace First { enum State { EMPTY,

哈希表之拉链法

前段时间理解了一下所谓的哈希表,一直以来在小博印象中哈希表是深奥的,是高大上的,但是接触原理以及看了一份demo之后我就觉得哈希表也就那样吧,接下来我把小博自己的理解尽量用最直白的语句来解释下~~~ ---------------------------------------------------------我是分界线,没错,很丑------------------------------------------------------------------ 首先什么是哈希表??? 散列表

PHP实现哈希表

//一个简单的哈希表实现.... <?php class hashTable { private $collection; private $size = 100; //初始化哈希表的大小 public function __construct($size='') { $bucketsSize = is_int($size)?$size:$this->size; $this->collection = new SplFixedArray($bucketsSize); } //生成散列值,

算法与数据结构之哈希表

哈希表:是一种key-value存储数据的结构 使用哈希表的两个步骤: 1.无序数组:将键值key转化为对应的索引(f(key)),根据索引来寻找对应的值(value) 2.解决哈希冲突:当key值不同,但f(key)相同 哈希函数:将key映射到对应的索引的映射函数f(x)即为哈希函数. 1.键为整数时,哈希函数一般为除留余数法.即对于大小为素数M的数组,对于任意正整数k,计算k除以M的余数.M一般取素数. 2.键为字符串时, 1>.将组成字符串的每一个字符取值然后进行哈希    h = s[