按第一个字母(大写)的顺序输出哈希表中所有的关键字

void PrintKeys(HashTable ht, void(*print)(StrKeyType)){
    // 从字母’A‘开始,按顺序输出哈希表中的所有的关键字
    // for循环中的i代表字母表中字母所处位置的下标
    for (int i = 0; i < 26; i++) {
        // 计算当前字母在哈希表中应该存储的位置
        int location = i % ht.size;
        // 判断当前位置是不是空
        // 如果是空,就说明哈希表中没有以这个下标对应的字母为开头的关键字
        // 那么无需输出
        if (ht.rcd[location].tag == 0) {
            continue;
        }
        else {
            // 如果非空,就说明当前位置有存储关键字
            // 但是不能确保当前位置的关键字一定以当前字母开头(有可能是别的位置的关键字因为冲突而存储到当前位置)
            // 所以需要判断当前位置的关键字的开头字母是不是当前字母
            // 另一方面,需要向后遍历数组,来输出所有的以当前字母为开头的关键字
            // 直至rcd的某个位置的关键字被标记为空或者已删除
            RcdType2 pointer = ht.rcd[location];
            int index = location;
            while (pointer.tag != 0) {
                // 如果当前位置的关键字以当前字母开头,就输出这个关键字
                if (pointer.key[0] == (char)(i + 65) && pointer.tag != -1) {
                    print(pointer.key);
                }
                // 继续探测下一个位置
                index = (index + 1) % ht.size;
                pointer = ht.rcd[index];
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值