#include<stdio.h> #include<stdlib.h> int HashSearch1(int ht[ ], int m, int k, int *p) /*形参p传指针,返回位置*/ { int i, j, flag = 0; /*flag=0表示散列表未满*/ j = H(k); /*计算散列地址*/ i = j; /*记载比较的起始位置*/ while (ht[i] != 0 && flag == 0) { if (ht[i] == k) { /*比较若干次查找成功*/ *p = i; return 1; } else i = (i + 1) % m; /*向后探测一个位置*/ if (i == j) flag = 1; /*表已满*/ } if (flag == 1) {printf("溢出"); exit(-1);} /*表满,产生溢出*/ else { /*比较若干次查找不成功,插入*/ ht[i] = k; *p = i; return 0; } }
时间: 2024-04-25 12:27:16 浏览: 45
c语言函数库-第一章(C标准库).doc
这段代码是实现了一个散列表中的线性探测法查找和插入元素的函数。其中,ht是散列表数组,m是散列表大小,k是要查找或插入的元素,p是一个指向位置的指针,函数返回值为1表示查找成功,返回值为0表示插入成功。具体实现过程是,首先计算元素k的散列地址j,然后从j开始向后探测,直到找到空位置或者回到j位置。如果找到了元素k,则返回1并将位置i存入指针p中;如果找到了空位置,则将元素k插入该位置并返回0,同时将位置i存入指针p中;如果探测过程中回到了起始位置j,说明散列表已满,产生溢出并退出程序。
阅读全文