广工数据结构第四单元

题目:已知某哈希表的装载因子小于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<ht.count-1) {
    int stand = (tip-65)%ht.size;
    while(ht.rcd[stand].tag!=0) {
      if(ht.rcd[stand].tag==1) {
        if(ht.rcd[stand].key[0]==tip) {
          print(ht.rcd[stand].key);
          hasPush++;
        }
      }
      stand = (stand+1)%ht.size;
    }
    tip++;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

舔猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值