【数据结构】小题

查找选择题

排序错误题

(1)从最后一个非叶子节点开始,逐层向前调整,使每个节点的值都小于其子节点。然后遍历检查是否满足小根堆的性质,通过逐步调整和检查,最终判断顺序表是否构成小根堆。
(2)// 建立小根堆的调整函数
void HeapAdjust(SqList *L, int s, int m) {
    int temp, j;
    temp = L->elem[s];
    for (j = 2 * s; j <= m; j *= 2) {
        if (j < m && L->elem[j] > L->elem[j + 1]) {
            j++; // 指向较小的子节点
        }
        if (temp <= L->elem[j]) {
            break; // 调整结束
        }
        L->elem[s] = L->elem[j];
        s = j; // 继续向下调整
    }
    L->elem[s] = temp; // 将原始根节点放到合适的位置
}

// 判断顺序表是否为小根堆
int IsMinHeap(SqList *L) {
    // 从最后一个非叶子节点开始向前调整
    for (int i = L->length / 2; i > 0; i--) {
        HeapAdjust(L, i, L->length);
    }

    // 遍历检查是否满足小根堆的性质
    for (int i = 1; i <= L->length / 2; i++) {
        if (2 * i <= L->length && L->elem[i] > L->elem[2 * i]) {
            return 0; // 不满足小根堆性质
        }
        if (2 * i + 1 <= L->length && L->elem[i] > L->elem[2 * i + 1]) {
            return 0; // 不满足小根堆性质
        }
    }
    return 1; // 满足小根堆性质
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值