c語言實現數據結構中的哈希表

    以下是我用c語言實現數據結構中的哈希表

#pragma once; 
 
#ifndef _STDLIB_H 
#define _STDLIB_H 
 
#include <stdlib.h> 
#include <string.h> 
#include <string> 
 
#endif 
 
#ifndef _DEBUG_H 
#define _DEBUG_H 
 
#include <stdio.h> 
 
#endif 
 
#define HASHTABLESIZE    100   
typedef int  KeyType;           
#define ERROR    INT_MAX        
 
#ifndef _ELEMTYPE_H 
#define _ELEMTYPE_H 
 
typedef struct   
{ 
    int Num;            
    std::string Name;      
    int Age;           
    std::string Sex;        
}ElemType,*Node,HashNode; 
 
#endif 
 
 
#ifndef _FUNCTION_H 
#define _FUNCTION_H 
 
typedef void(*Function)(ElemType); 
 
#endif 
 
 
#ifndef _HASHTABLE_H 
#define _HASHTABLE_H 
 
typedef struct 
{ 
    ElemType  elem[HASHTABLESIZE];     //ù· 
    int Count;           //±° 
    int SizeIndex;       //±í 
}*HashTable,Size; 
 
#endif


#pragma once; 
 
#include "stdafx.h" 
 
bool InitHashTable(HashTable &HT); 
 
int Hash(KeyType K); 
 
bool HashTableInsert(HashTable &HT, ElemType & Type); 
 
bool HashTableDelete(HashTable &HT, KeyType Type); 
 
ElemType  HashTableSearch(HashTable &HT, KeyType Type); 
 
void HashTableTraverse(HashTable &HT,Function p_function);

 
 
#include "HashTable.h" 
 
 
bool InitHashTable(HashTable &HT) 
{ 
    if (HT->elem == NULL) 
        return false; 
    else 
    { 
        int i; 
        for (i = 0; i < HASHTABLESIZE; i++) 
        { 
            HT->elem[i].Num = 0; 
            HT->elem[i].Name = "0"; 
            HT->elem[i].Age = 0; 
            HT->elem[i].Sex = "0"; 
        } 
        HT->SizeIndex = HASHTABLESIZE; 
        HT->Count = 0; 
        return true; 
    } 
} 
 
 
int Hash(KeyType K) 
{ 
    if (K <= 100) 
        return K - 1; 
    else 
        return ERROR; 
} 
 
 
bool HashTableInsert(HashTable &HT, ElemType & Type) 
{ 
    if (HT->elem == NULL) 
        return false; 
    else 
    { 
        KeyType Key = Hash(Type.Num); 
        if (Key == ERROR) 
            return false; 
        HT->elem[Key].Num = Type.Num; 
        HT->elem[Key].Name = Type.Name; 
        HT->elem[Key].Age = Type.Age; 
        HT->elem[Key].Sex = Type.Sex; 
        HT->Count++; 
        return true; 
    } 
} 
 
 
bool HashTableDelete(HashTable &HT, KeyType Type) 
{ 
    if (HT->elem == NULL) 
        return false; 
    else 
    { 
        KeyType Key = Hash(Type); 
        if (Key == ERROR) 
            return false; 
        else 
        { 
            HT->elem[Key].Num = 0; 
            HT->elem[Key].Name = NULL; 
            HT->elem[Key].Age = 0; 
            HT->elem[Key].Sex = NULL; 
            HT->Count--; 
        } 
        return true; 
    } 
} 
 
 
ElemType  HashTableSearch(HashTable &HT, KeyType Type) 
{ 
    if (HT->elem == NULL) 
        return HT->elem[0]; 
    else 
    { 
        KeyType Key = Hash(Type); 
        if (Key == ERROR) 
            return HT->elem[0]; 
        else 
        { 
            return HT->elem[Key]; 
        } 
    } 
} 
 
 
void HashTableTraverse(HashTable &HT, Function p_function) 
{ 
    if (HT->elem == NULL) 
        return; 
    else 
    { 
        int i; 
        for (i = 0; i < HT->SizeIndex; i++) 
        { 
            if (HT->elem[i].Name == NULL) 
                continue; 
            (*p_function)(HT->elem[i]); 
        } 
    } 
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章