哈希表建立

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*----------------------------------------------------------

哈希表的建立(链式解决冲突)

bluelithium2011/12/18 15:30

哈希函数: H(k) = k % INIT_MAXSIZE;

输入样例

25

14 54 67 8 34 22 16 45 87 60 39 28 71 30 107 875 43 21 14 11 9 89 79 66 55

8

10 20 30 40 50 60 70 80

----------------------------------------------------------*/

#include

#include

#define INIT_MAXSIZE 10

typedef struct Lnode

{

int data;

struct Lnode *next;

}Lnode, *ListLink;//建立链表结点

typedef struct

{

int pos;

ListLink firstnode;//建立数组结点

}HashBox;

typedef struct

{

HashBox HArrary[INIT_MAXSIZE];//建立哈希数组(哈希表的地址表头)

}HashArray;

void InitHashList(HashArray &l, int input[], int account);//建立哈希表

void VistHashList(HashArray &l);//遍历输出哈希表

int main(void)

{

int account = 0, i = 0, input[256];

HashArray l;

printf("请输入要插入哈希表元素的个数:");

scanf("%d", &account);

printf("请输入要插入哈希表的元素:");

for (i = 0; i < account; i++)

{

scanf("%d", &input[i]);

}

InitHashList(l, input, account);

printf("\n哈希表如下:\n");

VistHashList(l);

return 0;

}

void InitHashList(HashArray &l, int input[], int account)//建立哈希表

{

int i = 0, j = 0, pos = 0;

ListLink q, p;

char ch = 'A';

for (i = 0; i < INIT_MAXSIZE; i++)//初始化哈希表头

{

l.HArrary[i].pos = ch++;

l.HArrary[i].firstnode = NULL;

}

for (i = 0; i < account; i++)

{

pos = input[i] % INIT_MAXSIZE;//计算元素地址

q = new Lnode;//申请结点

q->data = input[i];

q->next = NULL;

if(l.HArrary[pos].firstnode == NULL)//判断当前地址表头是否还没有元素连入

{

l.HArrary[pos].firstnode = q;

}

else

{

p = l.HArrary[pos].firstnode;

while (p->next != NULL)

{

p = p->next;//找到链表表尾

}

p->next = q;//将要插入的结点接入表尾}

}

}

void VistHashList(HashArray &l)//输出哈希表

{

ListLink p;

int i;

for (i = 0; i < INIT_MAXSIZE; i++)

{

printf("%c. ", l.HArrary[i].pos);

p = l.HArrary[i].firstnode;

while (p != NULL)

{

printf("->%d", p->data);

p = p->next;

}

printf("\n");

}

}

相关文档
最新文档