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.实验结果

原创粉丝点击