資料結構-練習2 雜湊表

來源:互聯網
上載者:User

雜湊表是常用的資料結構,也是經常的面試題之一,所以程式員應該掌握並在平時的程式中使用它。下面簡單實現一個雜湊表。

        比如:數組 a=[3,6,1,5,9,10,100,34],現在要尋找元素100,最笨的演算法就是挨個遍曆,演算法複雜度是O(N),但是要是在平時程式中輕易寫出這樣的代碼,恐怕得被挨批,對於排序,尋找之類的,我們首先應該想到的是hash,因為其複雜度是常數層級的。

first,hash表的構造,我採用除留餘數法。因為我們提前知道數組的大小是8.所以hash表的大小為10.

          結果如:

                               ,

  hash構造採用除留餘數法,衝突採用線性再探測。如:0%10=0,34%10=4,在4的位置已經有元素,則(34+1)%10=5,5的位置已經有元素5,依此原理6的位置有元素6,直至7的位置沒元素。所以,34 放在此。hash構造的方法和衝突解決的方法原理大概就這樣了。

  一般採用hash方法的時候應包括這幾個函數:hash表格的初始化,hash表格的構造,hash表的出入,刪除和查詢。

下面列出代碼:

 

#include"iostream"using namespace std;#define MAX  10int * InitHash(int length)   {int* hashTa=(int *)malloc(length*sizeof(int)); if(!hashTa) return 0; for(int i=0;i<length;++i)   hashTa[i]=-1;   return hashTa;     }void CreateHash(int * HashTa){ int input[8];//=Hash_Ta;  cout<<"請輸入預定義的數組:"<<endl;  for(int i=0;i<8;++i){   cout<<"請輸入第"<<i<<"個整數"<<endl;   cin>>input[i]; }  cout<<"原始輸入數組為:"<<endl;for(int i=0;i<8;++i){ cout<<input[i]<<",";  }for(int i=0;i<8;++i){int Data0=input[i]%MAX;if(HashTa[Data0]==-1){  HashTa[input[i]%MAX]=input[i];}else{for(int k=1;k<MAX;++k){  int Data1=(Data0+k)%MAX;   if(HashTa[Data1]==-1)     {      HashTa[Data1]=input[i];break;     }}}}cout<<"簡曆後的hash表為:"<<endl;for(int i=0;i<MAX;++i){cout<<i<<"-----------"<<HashTa[i]<<endl;}}int SearchHash(int Idata,int * HashTa){  int temp=Idata%MAX; if( HashTa[temp]==-1) return -1;else if(HashTa[temp]==Idata) return temp;else{  for(int i=1;i<MAX;++i)       {        if(HashTa[(temp+i)%MAX]==-1)  return -1;        else if(HashTa[(temp+i)%MAX]==Idata)  return (temp+i)%MAX;                  }}return -1;}     int main()  {      int inData; int FlagOfIsConti=1;     int*HashTa= InitHash(10);     CreateHash(HashTa);cout<<"請輸入要尋找的數:"<<endl;  while(FlagOfIsConti){     cout<<"退出程式,輸入0,繼續輸入非0:";         cin>> FlagOfIsConti;cout<<"請輸入要尋找的數:";cin>>inData;     cout<< "尋找的結果:"<<SearchHash(inData, HashTa)<<endl;}return 0;    }

  

              

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.