广工数据结构第四单元

题目:已知某哈希表的装载因子小于1,哈希函数H(key)为关键字(标识符)的第一个字母在字母表中的序号,处理冲突的方法为线性探测开放定址法。试编写一个按第一个字母的顺序输出哈希表中所有关键字的算法。
哈希表的类型HashTable定义如下:
#define SUCCESS 1
#define UNSUCCESS 0
#define DUPLICATE -1
typedef char StrKeyType[4];
typedef struct {
StrKeyType key; // 关键字项
int tag; // 标记 0:空;1:有效; -1:已删除
void *any; // 其他信息
} RcdType;

typedef struct {
RcdType *rcd; // 存储空间基址
int size; // 哈希表容量
int count; // 表中当前记录个数
} HashTable;

实现下列函数:
void PrintKeys(HashTable ht, void(print)(StrKeyType));
/
依题意用print输出关键字 */

由于题目未给出具体的哈希函数,但是根据题目的H(key),可以知道哈希函数应该和key具有线性关系,再由题目描述的关键字为字母,则很容易推出哈希函数为 (X-65);从而得出关键的哈希位置,避免遍历;值得注意的是,由于题目装载因子小于1,所以在未知哈希函数下遍历有可能是超时的也是可以的;

答案仅供参考:

void PrintKeys(HashTable ht, void(*print)(StrKeyType)){
/* 依题意用print输出关键字 */
  char tip = 'A';
  int hasPush = 0;
  //由最小的A开始查找,知道找到所有存里面的数为止;
  while(hasPush

你可能感兴趣的:(GDUT,数据结构,算法,哈希表,c语言)