1. 程式人生 > >雜湊查詢與增補

雜湊查詢與增補

題目描述

給出一個數據序列,建立雜湊表,採用求餘法作為雜湊函式,模數為11,雜湊衝突用鏈地址法和表尾插入

如果首次查詢失敗,就把資料插入到相應的位置中

實現雜湊查詢與增補功能

輸入

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

輸出

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

樣例輸入

6 11 23 39 48 75 62 6 39
52 52 63 63 52 與圖的鄰接表儲存類似
#include<iostream>
using namespace std;
struct Node
{
    int data;
    Node *next;
};
int main()
{
    int key = 11;
    Node *Array[11];
    int n;
    cin >> n;
    int i;
    for (i = 0; i < 11; i++)
    {
        Array[i] 
= new Node; Array[i]->next = NULL; Array[i]->data = -1; } for (i = 0; i < n; i++) { int yu, x; cin >> x; yu = x % key; Node *q = Array[yu]; while (q->next) q = q->next; Node *p = new Node; p
->data = x; p->next = NULL; q->next = p; } int t; cin >> t; while (t--) { int x, yu; cin >> x; yu = x % key; Node *q = Array[yu]; int count = 0; while (1) { if (q->data == x) { cout << yu << " " << count << endl; break; } if (q->next == NULL) { cout << "error" << endl; Node *p = new Node; p->data = x; p->next = NULL; q->next = p; break; } count++; q = q->next; } } }

 

樣例輸出

6 1 error 8 1 error 8 2 8 1