HASH API

#include <stdio.h>
#include <stdlib.h>

#define SIZE 100000 //根据需要更改
typedef struct node {
int n;
char str[501];
struct node * prev;
struct node * next;
}Node;

Node HashTable[SIZE];

Node HashPool[SIZE];
int HashIndex = 0;

Node * getNewNode(){
return &HashPool[HashIndex++];
}

void insertNode(int key, Node * newNode){
Node * head = &HashTable[key];

newNode->prev = head;
newNode->next = head->next;

head->next = newNode;
newNode->next->prev = newNode;
}

void initHash(int N){
HashIndex = 0; //reset hash pool
for(int i = 0; i < N; i++){
HashTable[i].prev = &HashTable[i];
HashTable[i].next = &HashTable[i];
}
}

int getKey(char str[501]){
int val = 0;
for(int i = 0; i < 10; i++){
val = val*26 + str[i] - 'a';
val %= SIZE;
}
return val;
}

bool same(char str1[], char str2[]){
for(int i = 0; i < 500; i++){
if(str1[i] != str2[i]) return false;
}
return true;
}

Node * searchNode(Node * node){
int key = getKey(node->str);
Node * x = HashTable[key].next;
while(x != &HashTable[key] && !same(x->str, node->str)){
x = x->next;
}
if(x != &HashTable[key])
return x;
else return NULL;
}

void deleteNode(Node * node){
node->prev->next = node->next;
node->next->prev = node->prev;
}


int main(){

initHash(SIZE);
int max = 1;
for(int i = 0; i < SIZE; i++){
Node * newNode = getNewNode();
newNode->n = 1;
for(int j = 0; j < 500; j++){
newNode->str[j] = rand() % 26 + 'a';
}

Node * tmpNode = searchNode(newNode);
if(tmpNode != NULL){
tmpNode->n++;
if(tmpNode->n > max) max = tmpNode->n;
}else{
int key = getKey(newNode->str);
insertNode(key, newNode);
}
}

printf("%d\n", max);
return 0;
}

 

转载于:https://www.cnblogs.com/dahuacarry/p/8044272.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值