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);
}
运行结果: