zoukankan      html  css  js  c++  java
  • swust oj 1013

    哈希表(开放定址法处理冲突)

    1000(ms)
    10000(kb)
    2698 / 6177
    采用除留余数法(H(key)=key %n)建立长度为n的哈希表,处理冲突用开放定址法的线性探测。

    输入

    第一行为哈希表的长度n; 第二行为关键字的个数; 第三行为关键字集合; 第三行为要查找的数据。

    输出

    如果查找成功,输出关键字所哈希表中的地址和比较次数;如果查找不成功,输出-1。

    样例输入

    13
    11
    16 74 60 43 54 90 46 31 29 88 77
    16
    

    样例输出

    3,1
     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<cstring>
     6 #include<cmath>
     7 #include<list>
     8 #define rep(i,a,b) for(int i=a;i<b;i++)
     9 #define NULLKEY -1
    10 #define DELKEY -2
    11 using namespace std;
    12 typedef int KeyType;
    13 typedef struct{
    14     KeyType key;
    15     int count;
    16 }HashTable;
    17 
    18 void InsertHT(HashTable ha[],int &n,int m,int p,KeyType k)
    19 {
    20     int i,adr;
    21     adr=k%p;
    22     if(ha[adr].key==NULLKEY||ha[adr].key==DELKEY)
    23     {
    24         ha[adr].key=k;
    25         ha[adr].count=1;
    26     }
    27     else
    28     {
    29         i=1;
    30         do{
    31             adr=(adr+1)%m;
    32             i++;
    33         }while(ha[adr].key!=NULLKEY&&ha[adr].key!=DELKEY);
    34         ha[adr].key=k;
    35         ha[adr].count=i;
    36     }
    37     n++;
    38 }
    39 
    40 void creatHT(HashTable ha[],int &n,int m,int p,KeyType keys[],int nl)
    41 {
    42     rep(i,0,m)
    43     {
    44         ha[i].key=NULLKEY;
    45         ha[i].count=0;
    46     }
    47     n=0;
    48     rep(i,0,nl)
    49     InsertHT(ha,n,m,p,keys[i]);
    50 }
    51 
    52 bool DeleteHT(HashTable ha[],int &n,int m,int p,KeyType k)
    53 {
    54     int adr;
    55     adr=k%p;
    56     while(ha[adr].key!=NULLKEY&&ha[adr].key!=k)
    57         adr=(adr+1)%m;
    58     if(ha[adr].key==k)
    59     {
    60         ha[adr].key=DELKEY;
    61         return true;
    62     }
    63     else
    64         return false;
    65 }
    66 
    67 void serchHT(HashTable ha[],int m,int p,KeyType k)
    68 {
    69     int i=1,adr;
    70     adr=k%p;
    71     while(ha[adr].key!=NULLKEY&&ha[adr].key!=k)
    72     {
    73         i++;
    74         adr=(adr+1)%m;
    75     }
    76     if(ha[adr].key==k)
    77         cout<<k%p<<","<<i;
    78     else
    79         cout<<"-1";
    80 }
    81 
    82 int main()
    83 {
    84     int m,n,k,x;
    85     KeyType keys[1000];
    86     HashTable ha[100];
    87     cin>>m>>n;
    88     rep(i,0,n)
    89         cin>>keys[i];
    90     cin>>k;
    91     creatHT(ha,x,m,m,keys,n);
    92     serchHT(ha,m,m,k);
    93     rep(i,0,n)
    94         DeleteHT(ha,x,m,m,keys[i]);
    95     return 0;
    96 }
  • 相关阅读:
    Java操作Redis的方式
    Redis综述
    KafKa综述
    NuxtJS项目——状态树
    NuxtJS项目——开发工具
    NuxtJS项目——命令和部署
    NuxtJS项目——模块
    NuxtJS项目——插件
    NuxtJS项目——资源文件
    Sampling Matrix
  • 原文地址:https://www.cnblogs.com/Iwpml-595/p/10713034.html
Copyright © 2011-2022 走看看