概述
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define HASHLENGTH 10
struct node
{
int data;
struct node *next;
};
struct node hash[HASHLENGTH];
typedef struct node * HashNode;
int Hash(int k)
{
return k%HASHLENGTH;
}
void CreateHash()
{
for(int i=0; i<HASHLENGTH; i++)
{
hash[i].data = i;
hash[i].next = NULL;
}
}
void PrintOneLink(struct node h)
{
HashNode ptr = h.next;
while(ptr != NULL)
{
printf("%d ", ptr->data);
ptr = ptr->next;
}
printf("n");
}
void PrintHash()
{
for(int i=0; i<HASHLENGTH; i++)
{
printf("hash[%d]:", i);
PrintOneLink(hash[i]);
}
}
bool SearchHash(int data)
{
int p = Hash(data);
HashNode ptr = hash[p].next;
while(ptr != NULL && ptr->data!=data)
{
ptr = ptr->next;
}
if(ptr == NULL)
return false;
return true;
}
int InsertHash(int data)
{
if(SearchHash(data)==true)
{
return 0;
}
else
{
int p = Hash(data);
HashNode hn = (HashNode)malloc(sizeof(struct node));
hn->data = data;
hn->next = NULL;
if(hash[p].next == NULL)
{
hash[p].next = hn;
}
else
{
hn->next = hash[p].next;
hash[p].next = hn;
}
}
return 1;
}
void DeleteHash(int data)
{
if(SearchHash(data)==true)
{
int p = Hash(data);
HashNode ptr = hash[p].next;
HashNode prePtr = ptr;
if(ptr->data == data)
{
hash[p].next = ptr->next;
free (ptr);
}
else
{
while(ptr != NULL && ptr->data != data)
{
prePtr = ptr;
ptr = ptr->next;
}
prePtr->next = ptr->next;
free(ptr);
}
}
else
{
printf("Don't have the numbern");
}
}
void HashTest()
{
CreateHash();
int data = -99;
srand( (unsigned)time(NULL) );
for(int i=0; i<30; i++)
{
data = rand();
InsertHash(data);
}
PrintHash();
printf("Enter a number to delete:");
while(scanf("%d", &data) != EOF)
{
DeleteHash(data);
PrintHash();
printf("Enter a number to delete:");
}
}
int main()
{
HashTest();
return 0;
}
最后
以上就是寒冷纸鹤为你收集整理的C++哈希表实现的全部内容,希望文章能够帮你解决C++哈希表实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复