以下是我用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]); } } }