Hash表技术:线性hash表类
来源:互联网 发布:苹果8打不开数据 编辑:程序博客网 时间:2024/06/04 21:01
1. Hash表技术的基本思想是:对被查元素的关键字做某种运算后直接确定所要查找项目在表中位置。
2.线性Hash表类:Linear_hash.h
#include <iostream>using namespace std;//线性hash表结点类型template <class T>struct Hnode{int flag;//标志表项的空与非空T key; //关键字};template <class T>class Linear_hash{private:int NN;//线性hash表长度Hnode<T> * LH;//线性hash表存储空间的首地址public:Linear_hash(){NN=0;return;}Linear_hash(int);//建立线性hash表存储空间void prt_Linear_hash();//顺序输出线性hash表中元素int flag_Linear_hash();//检测线性hash表中空项个数void ins_Linear_hash(int (*f)(T),T);//在线性hash表中填入新数据int search_Linear_hash(int (*f)(T),T);//在线性hash表中查找元素};//建立线性hash表存储空间template <class T>Linear_hash<T>::Linear_hash(int m){int k;NN=m;LH=new Hnode<T>[NN];for(k=0;k<NN;k++)LH[k].flag=0;return;}//顺序输出线性hash表中元素template <class T>void Linear_hash<T>::prt_Linear_hash(){int k;for(k=0;k<NN;k++)if(LH[k].flag==0) cout<<"<null>"<<" "; else cout<<"<"<<LH[k].key<<">";cout<<endl;return;}//检测线性hash表中空项个数template <class T>int Linear_hash<T>::flag_Linear_hash(){int k,count=0;for(k=0;k<NN;k++)if(LH[k].flag==0)count=count+1;return(count);}//在线性hash表中填入新数据template <class T>void Linear_hash<T>::ins_Linear_hash(int (*f)(T),T x){int k;if(flag_Linear_hash()==0){cout<<"线性hash表已满!"<<endl;return;}k=(*f)(x); //计算Hash码while(LH[k-1].flag) //该项不空{k=k+1;if(k==NN+1)k=1;}LH[k-1].key=x,LH[k-1].flag=1;//填入并置标志return;}//在线性hash表中查找元素template <class T>int Linear_hash<T>::search_Linear_hash(int (*f)(T),T x){int k;k=(*f)(x);while((LH[k-1].flag)&&(LH[k-1].key!=x)){k=k+1;if(k==NN+1)k=1;}if((LH[k-1].flag)&&(LH[k-1].key==x)) //找到返回return(k);return(0); //表中没有这个关键字,返回}
3.具体实现
#include "Linear_hash.h"int hashf(int k);int main(){int a[12]={9,31,26,19,1,13,2,11,27,16,5,21};int k;Linear_hash<int> h(12);cout<<"输入的原序列:"<<endl;for(k=0;k<12;k++)cout<<a[k]<<" ";cout<<endl;for(k=0;k<12;k++)h.ins_Linear_hash(hashf,a[k]);cout<<"依次输出线性hash表中的关键字:"<<endl;h.prt_Linear_hash();cout<<"查找序列各个关键字在线性hash表中的位置(表项序号):"<<endl;for(k=0;k<12;k++)cout<<h.search_Linear_hash(hashf,a[k])<<" ";cout<<endl;return 0;}int hashf(int k){return(k/3+1);}
4.实验结果
- Hash表技术:线性hash表类
- hash表线性探测法
- UVA - 704 Colour Hash(双向bfs+hash+线性表)
- 线性表,树,hash表的优缺点
- 线性hash表的实现和操作
- 线性探测法构造hash表
- 线性探测-Hash表的创建-查找
- 线性探测法hash
- Hash 函数、Hash表
- hash表、hash算法
- hash-A-hash表
- Hash表、Hash冲突
- hash
- Hash
- hash
- hash
- Hash
- hash
- 自己动手实现一个《倒水解密》游戏
- java 23种设计模式【摘录】
- Android开发: strings.xml文件中的错误
- postsql grant 权限 role
- Java线程总结
- Hash表技术:线性hash表类
- ubuntu sudo is not in the sudoers file.
- 如何判断存在弹出窗体?如何判断当前窗口是活动窗口?
- ibatis的resultClass
- Linux中的$#,$@,$0,$1,$2,$*,$$,$?变量
- Android开发: 获得某一个类型文件的打开方式
- Uva 674 Coin Change
- 关于欧拉函数的两种求法
- 破解SQLYog30天试用方法