ハッシュテーブル構造と検索アルゴリズムを実現する

1621 ワード

ハッシュテーブル構造と検索アルゴリズムを実現する 
ハッシュテーブル構造と検索アルゴリズムを実現する
使用しているのはデポジット法を除いてハッシュ関数を構成しています.ここでは衝突を解決するために2つの方法を使っています.
  • 回にわたって再ハッシュを検出する.
  • は、衝突を解決するために再びハッシュを検出する.
  • #include
    #include
    #include
    
    #define NULLKEY -1
    typedef struct{
    	int key;
    }KeyType;
    typedef struct{
    	KeyType *elem;//           
    	int count;	//        
    	int sizeindex;	//      
    }HashTable;
    
    int Hash(HashTable *H,int k){
    	return (k%H->sizeindex);
    }
    
    int Hash2(int i,int t){
    	int a=0,b=0;
    	if(i%2==0)
    		t=t+pow(++a,2);
    	else
    		t=t-pow(++b,2);
    	return t;
    }
    
    void CreateHash(HashTable *H){
    	int i,j,key,p,t,c=0;
    	printf("             :
    "); scanf("%d%d",&H->count,&H->sizeindex); H->elem=(KeyType *)malloc(H->sizeindex * sizeof(KeyType)); // for(i=0;isizeindex;i++) H->elem[i].key=NULLKEY; printf(" :
    "); for(j=0;jcount;j++){ scanf("%d",&key); p=Hash(H,key); if(H->elem[p].key==NULLKEY) H->elem[p].key=key; else{ while(H->elem[p].key!=NULLKEY){ t=p+1; p=Hash(H,t); } H->elem[p].key=key; } } } int SearchHash(HashTable H,int key){ int p,t; p=Hash(&H,key); while(H.elem[p].key!=NULLKEY&&H.elem[p].key!=key){ t=p+1; p=Hash(&H,t); } if(H.elem[p].key==key) return p; else return -1; } void print(HashTable H){ int i=0; for(i=0;i