1哈希表-通讯录
1.1哈希结点结构体定义
/*=====自定义数据类型=====*/
typedef struct person_information
{
char name[32];
char sex;
int age;
char tel[32];
char addr[64];
}DATA_TYPE;
/*=====定义一个哈希数据结点=====*/
typedef struct hash_node
{
DATA_TYPE data;//哈希结点数据域
struct hash_node *pnext;//哈希结点指针域
}HASH_NODE;
1.2哈希函数
/*==========哈希函数==========*/
int hash_fun(char ch)
{
return ch-'a';
}
1.3创建一个哈希表结点
/*==========创建一个哈希表结点==========*/
HASH_NODE* create_hash_table_node(DATA_TYPE data)
{
HASH_NODE *pnode=NULL;
/*创建一个哈希表结点空间*/
pnode=malloc(sizeof(HASH_NODE));
if(NULL==pnode)
{
perror("fail to malloc");
return NULL;
}
/*哈希表结点初始化*/
pnode->data=data;
pnode->pnext=NULL;
return pnode;
}
1.4哈希表插入
/*==========哈希表插入==========*/
int insert_hash_table(HASH_NODE *pnode,DATA_TYPE data)
{
int addr=0;
addr=hash_fun(data.name[0]);
pnode->pnext=hash_table_head[addr];
hash_table_head[addr]=pnode;
return 0;
}
1.5哈希表遍历
/*==========哈希表遍历==========*/
void hash_for_each(void (*pfun)(HASH_NODE *))
{
HASH_NODE *ptmp=NULL;
int i=0;
for(i=0;i<HASH_SIZE;i++)
{
ptmp=hash_table_head[i];
while(1)
{
if(ptmp==NULL)
{
break;
}
pfun(ptmp);
ptmp=ptmp->pnext;
}
}
}
/*==========遍历方式==========*/
void show_data(HASH_NODE *pnode)
{
printf("%-10s\t%-10c\t%-10d\t%-10s\t%-20s\n",pnode->data.name,pnode->data.sex,pnode->data.age,pnode->data.tel,pnode->data.addr);
}
运行结果: