散列表的C语言实现-开放定址法
来源:互联网 发布:澳洲gpa算法 编辑:程序博客网 时间:2024/05/21 10:28
头文件:
#ifndef __HASHTABLE_H#define __HASHTABLE_H/*********************(平方)开放定址散列法***************///如果有冲突发生,那么就尝试另外的单元,直到找到空的单元为止typedef unsigned int index;typedef index position;typedef int ElementType;#define MINTABLESIZE 5struct hashTable;typedef struct HashTable *hashTable;hashTable initializeTable(int tableSize);void destoryTable(hashTable H);position find(ElementType key,hashTable H);void insert(ElementType key,hashTable H);ElementType retrieve(position p,hashTable H);hashTable reHash(hashTable H);int Delete(ElementType key,hashTable H);int nextPrime(int tableSize);int isPrime(int x);int Hash(ElementType key,int tableSize);enum kindOfEntry{legitimate,empty,deleted};struct hashEntry{ElementType element;enum kindOfEntry info;};typedef struct hashEntry cell;struct HashTable{int tableSize;cell *theCells;};
#endif
#include "HashTable.h"#include <stdio.h>#include <stdlib.h>/***********************开发定址法(平方)***********************************/hashTable initializeTable(int tableSize){hashTable table;int i;if(tableSize<MINTABLESIZE){printf("table size is too small\n");exit(-1);}table=(hashTable)malloc(sizeof(struct HashTable));if(!table){printf("out of space\n");exit(-1);}table->tableSize=nextPrime(tableSize);table->theCells=(cell*)malloc(sizeof(cell)*table->tableSize);if(!table->theCells){printf("out of space\n");exit(-1);}for(i=0;i<table->tableSize;i++)table->theCells[i].info=empty;return table;}void destoryTable(hashTable H){free(H->theCells);H=NULL;}position find(ElementType key,hashTable H){position currentPos;int collisionNum;collisionNum=0;currentPos=Hash(key,H->tableSize);while(H->theCells[currentPos].info!=empty&&H->theCells[currentPos].element!=key){//平方探测法currentPos+=2*collisionNum-1;if(currentPos>=H->tableSize)currentPos-=H->tableSize;}return currentPos;}int Delete(ElementType key,hashTable H){position pos;pos=find(key,H);if(H->theCells[pos].info==empty)return 0;else{H->theCells[pos].info=deleted;return 1;}}void insert(ElementType key,hashTable H){position pos;pos=find(key,H);if(H->theCells[pos].info!=legitimate){H->theCells[pos].info=legitimate;H->theCells[pos].element=key;}}ElementType retrieve(position p,hashTable H){}hashTable reHash(hashTable H)//再散列{int i,oldSize;cell *oldCells;oldCells=H->theCells;oldSize=H->tableSize;H=initializeTable(2*oldSize);for(i=0;i<oldSize;i++){if(oldCells[i].info==legitimate)insert(oldCells[i].element,H);}free(oldCells);return H;}int nextPrime(int tableSize){while(1){if(isPrime(tableSize))return tableSize;elsetableSize++;}}int isPrime(int x){int i;for(i=2;i*i<=x;i++){if(x%i==0)return 0;}return 1;}int Hash(ElementType key,int tableSize){return key%tableSize;}/**************************************************************************/
1 0
- 散列表的C语言实现-开放定址法
- 开放定址散列表--C语言实现
- 散列表的实现-开放定址法
- 开放定址散列表(线性探测法)实现文件C语言
- 开放定址散列表(平方探测法)实现文件C语言
- 开放定址散列表(线性探测法(双散列))实现文件C语言
- 再散列开放定址散列表(线性探测法)加强版可再散列经优化实现文件C语言
- 开放定址法实现散列表
- 散列 开放定址法 C实现
- 开放定址散列表(线性探测法)头文件C语言
- 开放定址散列表(平方探测法)头文件C语言
- 开放定址散列表(线性探测法(双散列))头文件C语言
- 再散列--开放定址散列表(线性探测法)加强版可再散列经优化头文件C语言
- 开放定址法解决hash冲突问题(C语言实现)
- 数据结构与算法分析-开放定址散列表的实现
- 散列表开放定址法的初始化、插入、打印等函数(c)
- 散列表之开放定址法
- 开放定址法解决hash冲突(C语言)
- UVA232 纵横字的解答
- 数据结构—二分查找
- mysql本地访问linux服务器,出现SQLSTATE[HY000] [1130] Host '127.0.0.1' is not allowed to connect to this
- 贾青深夜前往派出所报案严厉谴责不雅照事件
- C++学习
- 散列表的C语言实现-开放定址法
- 《爵迹》主演海报集合票房被看好郭敬明颜控造福粉丝
- 九度oj 1131
- CasperJS 抓取京东商品详情页中的商品信息
- 【shell脚本练习】grep sed awk
- CodeForces 435B
- Proguard.cfg 配置
- 黑马程序员——网络编程3:网络通讯组件介绍及演示-下
- 范冰冰与李晨合体捞金遭粉丝催婚 获赠婚床捂脸羞笑