哈希查找
#include <stdio.h>#include <malloc.h>#define MaxSize 100 /*哈希表最大长度*/typedef int KeyType;typedef struct node{ KeyType key; /*关键字值*/ int si; /*探查次数*/ struct node *next;} Node; /*数据结点类型*/typedef struct{ Node *link;} HNode; /*头结点类型*/void CreateHT(HNode *ht[],KeyType a[],int n,int p) /*构造哈希表*/{ int i,d,cnt; Node *s,*q; for (i=0;i<p;i++) /*所有头结点的link域置空*/ { ht[i]=(HNode *)malloc(sizeof(HNode)); ht[i]->link=NULL; } for (i=0;i<n;i++) { cnt=1; s=(Node *)malloc(sizeof(Node)); /*构造一个数据结点*/ s->key=a[i];s->next=NULL; d=a[i]%p; /*求其哈希地址*/ if (ht[d]->link==NULL) { ht[d]->link=s; s->si=cnt; } else { q=ht[d]->link; while (q->next!=NULL) { q=q->next;cnt++; } cnt++; s->si=cnt;q->next=s; } }}void DispHT(HNode *ht[],int n,int p) /*输出哈希表*/{ int i,sum=0; Node *q; printf("哈希表:\n"); for (i=0;i<p;i++) { q=ht[i]->link; printf("%d:link->",i); while (q!=NULL) { sum+=q->si; printf("[%d,%d]->",q->key,q->si); q=q->next; } printf("∧\n"); } printf("\n平均查找长度:ASL=%g\n",1.0*sum/n);}void main(){ HNode *ht[MaxSize]; KeyType a[]={87,25,310,8,27,132,68,95,187,123,70,63,47}; int n=13,p=13; CreateHT(ht,a,n,p); DispHT(ht,n,p);}