#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define B_MAX 5
typedef struct bucket bucket;
typedef struct list list;
struct bucket
{
int key;
list * value;
bucket * previous;
bucket * next;
list * tail;
};
struct list
{
char * key;
char * value;
int position;
list * previous;
list * next;
};
int size_l=sizeof(list);
int size_b=sizeof(bucket);
void * my_malloc(int size)
{
void * point;
if((point=malloc(size))==NULL)
{
fprintf(stdout,"内存分配失败:%s\t",strerror(errno));
return NULL;
}
else
{
return point;
}
}
int add(bucket * b,char * key,char * value)
{
if(strlen(key)>0)
{
char index=key[0];
int index_h=((int)(index))%B_MAX;
//printf("[%d]\t",index_h);
bucket * loc=b+index_h;
if(loc->value==NULL)
{
list * node_t=(list *)my_malloc(size_l);
node_t->previous=NULL;
node_t->next=NULL;
node_t->value=value;
node_t->key=key;
node_t->position=1;
loc->value=node_t;
loc->tail=node_t;
}
else
{
//find
list * l=loc->value;
int find_flag=0;
while(l!=NULL)
{
if(!strcmp(l->key,key))
{
find_flag=1;
break;
}
l=l->next;
}
if(!find_flag)
{
list * node_t=(list *)my_malloc(size_l);
node_t->key=key;
node_t->value=value;
node_t->next=NULL;
node_t->previous=loc->tail;
node_t->position++;
loc->tail->next=node_t;
loc->tail=node_t;
}
else
{
return 0;
}
}
return 1;
}
return -1;
}
int find(bucket * b,char * key)
{
}
void main()
{
bucket * first=(bucket *)my_malloc(B_MAX*size_b);
for(int i=0;i<B_MAX;i++)
{
bucket * loc=(first+i);
if(i==B_MAX-1)
{
loc->next=NULL;
}
else
{
loc->next=loc+1;
}
if(i==0)
{
loc->previous=NULL;
}
else
{
loc->previous=loc-1;
}
loc->key=i;
loc->value=NULL;
}
/*
bucket * tmp=first;
while(tmp!=NULL)
{
fprintf(stdout,"%d\t",tmp->key);
tmp=tmp->next;
}
fprintf(stdout,"\n");
*/
add(first,"a","123");
add(first,"b","f2321d");
add(first,"c","32");
add(first,"a","fd11f");
bucket * p=first;
while(p!=NULL)
{
fprintf(stdout,"%d\n",p->key);
if(p->value!=NULL)
{
list * node_l=p->value;
while(node_l!=NULL)
{
fprintf(stdout,"%s\t",node_l->value);
node_l=node_l->next;
}
fprintf(stdout,"\n");
}
p=p->next;
}
fprintf(stdout,"\n");
}