DS哈希查找—線性探測再散列


題目描述

 定義哈希函數為H(key) = key%11,輸入表長(大於、等於11)。輸入關鍵字集合,用線性探測再散列構建哈希表,並查找給定關鍵字。

--程序要求--

若使用C++只能include一個頭文件iostream;若使用C語言只能include一個頭文件stdio

程序中若include多過一個頭文件,不看代碼,作0分處理

不允許使用第三方對象或函數實現本題的要求

輸入

 測試次數t

每組測試數據為:

哈希表長m、關鍵字個數n

n個關鍵字

查找次數k

k個待查關鍵字

 

輸出

對每組測試數據,輸出以下信息:

構造的哈希表信息,數組中沒有關鍵字的位置輸出NULL

對k個待查關鍵字,分別輸出:0或1(0—不成功,1—成功)、比較次數、查找成功的位置(從1開始)

 

樣例輸入

1 12 10 22 19 21 8 9 30 33 4 15 14 4 22 56 30 17

樣例輸出

22 30 33 14 4 15 NULL NULL 19 8 21 9 1 1 1 0 6 1 6 2 0 1

提示

#include<iostream>
using namespace std;
#define INF -9999
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int m,n;
        cin>>m>>n;
        int *array=new int[m];
        for(int i=0;i<m;i++)
            array[i]=INF;
        for(int i=0;i<n;i++)
        {
            int num;
            cin>>num;
            if(array[num%11]==INF)
            {
                array[num%11]=num;
            }
            else
            {
                int di=0;
                while(true)
                {
                    if(array[(num%11+di)%m]==INF)
                    {
                        array[(num%11+di)%m]=num;
                        break;
                    }
                    else
                        di++;
                }
            }
        }
        for(int i=0;i<m;i++)
        {
            if(array[i]!=INF)
                cout<<array[i];
            else
                cout<<"NULL";
            if(i!=m-1)
                cout<<" ";
        }
        cout<<endl;
 
        int K;
        cin>>K;
        while(K--)
        {
            int di=0;
            int C;
            cin>>C;
            int times=0;
            while(true)
            {
                times++;
                if(array[(C%11+di)%m]==C)
                {
                    cout<<"1"<<" "<<times<<" "<<(C%11+di)%m+1<<endl;
                    break;
                }
                else if(di==m||array[(C%11+di)%m]==INF)
                {
                    cout<<"0"<<" "<<times<<endl;
                    break;
                }
                else
                    di++;
            }
        }
        delete []array;
    }
    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM