DS哈希查找與增補


題目描述

給出一個數據序列,建立哈希表,采用求余法作為哈希函數,模數為11,哈希沖突用鏈地址法和表尾插入

如果首次查找失敗,就把數據插入到相應的位置中

實現哈希查找與增補功能

 

輸入

第一行輸入n,表示有n個數據
第二行輸入n個數據,都是自然數且互不相同,數據之間用空格隔開
第三行輸入t,表示要查找t個數據
從第四行起,每行輸入一個要查找的數據,都是正整數

 

輸出

每行輸出對應數據的查找結果,每個結果表示為數據所在位置[0,11)和查找次數,中間用空格分開

 

樣例輸入

6 11 23 39 48 75 62 6 39 52 52 63 63 52

樣例輸出

6 1 error 8 1 error 8 2 8 1

提示

#include<iostream>
using namespace std;
#define INF 0x3f3f
class CNode
{
public:
    int data;
    CNode *next;
    CNode()
    {
        next=NULL;
    }
    CNode(int n,CNode *x)
    {
        data=n;
        next=x;
    }
};
int findhash(CNode Hash[15],CNode *ptr[15],int h)
{
    int tag=0;
    int times=1;
    if(Hash[h%11].data==h)
    {
        tag=1;
        cout<<h%11<<" "<<times<<endl;
    }
    else
    {
        CNode *p=&Hash[h%11];
        p=p->next;
        while(true)
        {
            times++;
            if(p==NULL)
                break;
            else
            {
                if(p->data==h)
                {
                    tag=1;
                    break;
                }
            }
            p=p->next;
        }
        if(tag==1)
                cout<<h%11<<" "<<times<<endl;
        else
            cout<<"error"<<endl;
    }
    return tag;
}
 
 
int main()
{
    int n;
    cin>>n;
    CNode Hash[15];
    CNode *ptr[15];
    for(int i=0;i<15;i++)
    {
        Hash[i].data=INF;
    }
    for(int i=0;i<n;i++)
    {
        int num;
        cin>>num;
        if(Hash[num%11].data==INF)
        {
            Hash[num%11].data=num;
            ptr[num%11]=&Hash[num%11];
        }
        else
        {
            CNode *p=new CNode();
            p->data=num;
            p->next=NULL;
            ptr[num%11]->next=p;
            ptr[num%11]=p;
        }
    }
    int T;
    cin>>T;
    while(T--)
    {
        int h;
        cin>>h;
        if(findhash(Hash,ptr,h)==0)
        {
            if(Hash[h%11].data==INF)
            {
                Hash[h%11].data=h;
                ptr[h%11]=&Hash[h%11];
            }
            else
            {
                CNode *p=new CNode();
                p->data=h;
                p->next=NULL;
                ptr[h%11]->next=p;
                ptr[h%11]=p;
            }
        }
    }
    return 0;
}


免責聲明!

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



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