指针数组问题

指针数组问题

https://img1.sycdn.imooc.com//climg/63139fa409f8e28415771016.jpg

h->elem_p可以当成指针数组用吧,为何这里的h->elem_p[index] = temp无效?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
山行老师 2022-09-04 11:16:08

课程里面讲哈希表有2钟封装形式:
1)开放地址法:

typedef struct node

{

datatype_t *elem_p; //数组元素的首地址,动态保存数组

int n; //记录当前元素的个数,满了则不能插入了

}hashtable_t;

2)链地址法:

typedef struct node

{

datatype_t data;

struct node *next;

}hashtable_t;

前者可以用h->elem_p可以当成指针数组;
你这里截图部分是用的什么封装形式,要做什么逻辑呢?

  • 提问者 佚__名 #1

    解决了,课程里面讲链地址法的时候是直接操作指针数组的,我是参照开放地址法把指针数组封装在一个结构体里面

    typedef int datatype_t;
    
    typedef struct node {
        datatype_t data;
        struct node *next;
    } link_node_t;
    
    typedef struct hash_node {
        link_node_t **elem_p; // 数组元素的首地址,动态保存数组
        int n; // 记录当前元素的个数,满了则不能插入了
    } hashtable_t;
    
    // 1. 创建一个空的哈希表数组,在堆区分配空间,数组中存储的是地址
    hashtable_t *create_hashtable() {
        hashtable_t *h = NULL;
    
        h = (hashtable_t *) malloc(sizeof(hashtable_t));
    
        h->elem_p = (link_node_t **) malloc(MAX * sizeof(link_node_t *));
        h->n = 0;
    
        memset(h->elem_p, 0, sizeof(link_node_t *) * MAX);
    
        // 将hash数组中所有指针的值初始化为NULL
        for (int i = 0; i < MAX; i++) {
            h->elem_p[i] = NULL;
        }
    
        return h;
    }

    插入数据方法我之前写的有问题,导致每次遇到冲突都是在指针数组对应索引位置直接覆盖原先的值,而不是在链表里链接起来,左边是之前写的,我改成右边的用二级指针操作就对了

    https://img1.sycdn.imooc.com//climg/63143779098bdb2818250780.jpg

    2022-09-04 13:28:31
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师