用c语言实现基本数据结构(哈希表)
用c语言实现基本数据结构(哈希表)
写这个哈希表总是段错误,找了半天的bug。。。原来是各种小错误不断,写得很蛋疼。
我是是用数组实现的,数组的最大值定义成的宏。一共只有四个函数,分别为初始化哈希表,构造哈希函数,将数据存进去,将数据取出来。
我假设的关键字范围为10以内的英文字母组合。
解决哈希冲突的方法用的线性探测。用这个,是因为比较简单。。。:)
结构体如下
struct hashdata{int data;char* key;
};
完整代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXHASH 1000struct hashdata{int data;char* key;
};void initHash(struct hashdata* hashTable, int len){for(int i = 0; i< len; i++){hashTable[i].data = 0;hashTable[i].key = NULL;}
}int convertHash(char * key){int re = 0;int len = strlen(key);if(len > 10){printf("key should less than 10 char");}for(int i = 0; i < len; i++){re += (float)(key[i]-65)*MAXHASH/10/48;}return (int)re;
}int saveHash(struct hashdata* hashTable, char* key, int data){int pos = convertHash(key);if(hashTable[pos].key == NULL){hashTable[pos].data = data;hashTable[pos].key = key;}else if(!strcmp(hashTable[pos].key, key)){hashTable[pos].data = data;printf("\nsave success!\n");return 1;}else{for(int i = 0; i< MAXHASH; i++){pos = (pos+1)%MAXHASH;if(hashTable[pos].key == NULL){hashTable[pos].data = data;hashTable[pos].key = key;printf("\nsave success!\n");return 1;}}}return 0;
}int findHash(struct hashdata* hashTable, char* key){int pos = convertHash(key);if(hashTable[pos].key == NULL){printf("\nno this data\n");return 0;}if(!strcmp(hashTable[pos].key, key)){return hashTable[pos].data;}else{for(int i = 0; i< MAXHASH; i++){pos = (pos+1)%MAXHASH;if(hashTable[pos].key == NULL){return 0;}if(!strcmp(hashTable[pos].key, key)){return hashTable[pos].key;}}}printf("\nno this data\n");return 0;
}
测试代码如下
#include"myHash.h"int main(){struct hashdata* hashTable = (struct hashdata *)malloc(4*MAXHASH);printf("-----------------------\n");initHash(hashTable, MAXHASH);printf("-----------------------\n");saveHash(hashTable, "apple", 1000);saveHash(hashTable, "you", 888);saveHash(hashTable, "you", 999);saveHash(hashTable, "tree", 20);printf("-----------------------\n");printf("%d\n", findHash(hashTable, "you") );printf("%d\n", findHash(hashTable, "is"));
}
用c语言实现基本数据结构(哈希表)相关推荐
- Python中常用的数据结构---哈希表(字典)
Python中常用的数据结构-哈希表(字典) 常用的数据结构有数组.链表(一对一).栈和队列.哈希表.树(一对多).图(多对多)等结构. 在本目录下我们将讲解,通过python语言实现常用的数据结构. ...
- 数据结构——哈希表的详解与实现
数据结构--哈希表(HashTable) 1.前言 当我们频繁的查找数据中的某个元素时,我们通常会选择数组来存放数据,因为数组的的内存是连续的,可以直接通过下标访问数据,但是它添加和删除数据比较麻 ...
- 数据结构哈希表的实现与设计
数据结构哈希表查找姓名的课程设计 有没有大神能帮忙写一下这道题,课设的题目.用C++语言 问题描述:针对某公司中花名设计哈希表,并完成相应的建表和查表程序,基本要求: (1)假设花名为汉字拼音形式.名 ...
- java hashtable 数据结构_数据结构--哈希表(Java)
数据结构--哈希表(Java) 介绍 哈希表 底层是 数组加链表 或者是 数组加二叉树 ,一个数组里面有多个链表,通过散列函数来提高效率 代码 package cn.guizimo.hashtab; ...
- 哈希(散列)(三):C语言实现 动态态哈希表
哈希(散列)的概念: https://blog.csdn.net/mowen_mowen/article/details/82943192 C语言实现:静态哈希表: https://blog.csdn ...
- 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题
layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...
- C语言实现简单的哈希表
CRC是通信领域中用于校验数据传输正确性的最常用机制,也是Hash算法的一个典型应用,Hash一般翻译为"散列",也可直接音译为"哈希",就是把任意长度的输入( ...
- 数据结构 — 哈希表
目录 文章目录 目录 哈希表 哈希表 哈希表,又称为散列表,是根据键值对(Key/Value)进行访问的数据结构,它让 Value 经过哈希函数的转换映射到哈希表对应的位置上,查找效率非常高.哈希索引 ...
- 哈希表数据结构_Java数据结构哈希表如何避免冲突
前言 一.哈希表是what? 这是百度上给出的回答: 简而言之,为什么要有这种数据结构呢? 因为我们想不经过任何比较,一次从表中得到想要搜索的元素.所以就构造出来了哈希表,通过某种函数(哈希函数)使元 ...
- openssl lhash 数据结构哈希表
哈希表是一种数据结构,通过在记录的存储位置和它的关键字之间建立确定的对应关系,来快速查询表中的数据: openssl lhash.h 为我们提供了哈希表OPENSSL_LHASH 的相关接口,我们可以 ...
最新文章
- oracle分页的使用,oracle中分页的实现方式.rownum的使用
- uncompressing linux .................................................后没反应解决办法
- 微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列
- https Java SSLException protocol_version的问题解决方法
- 实验6 VRRP网关备份(下)
- Spark性能优化:对RDD持久化或CheckPoint操作
- HashSet源码分析 jdk1.6
- 网上看到的一个百度实习生笔试题
- 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?
- 基于Matlab的跨孔层析成像的最短路径法弯曲射线追踪(二)
- linux mac time machine,用 Ubuntu 10.10 构建 Time Machine 备份服务器
- 全球以太网交换机和路由器市场:谁领跑?
- 华为lab-rs-v1-2.3_OSPF基础
- 如何判断某版本的.NET Framework是否安装
- 选择checkbox显示隐藏内容
- 「Android - SoundPool使用」
- U盘有必要安全弹出吗??
- 从小白开始教你怎样在Eclipse中使用Git(番外) - 各种图标的含义
- python中用来抛出异常的关键字是( )_python如何抛出异常
- 【CV/Matlab系列】基于图像处理的苹果质量检测和分级系统【含Matlab源码】