xiaoxuan wu 2024-04-02 19:53 采纳率: 50%
浏览 16
已结题

为什么会这样啊?不知道怎么办

img

Status mergeSqlist(const Sqlist& a, const Sqlist& b, Sqlist& c)
{
    int pc, pa, pb;
    pa = pb = pc = 0;
    c.elem = new ElempType[a.length + b.length];
    if (!c.elem)
    {
        cerr << "the new is fail in merge!" << endl;
        return ERROR;
    }
    while (pa < a.length && pb < b.length)
    {
        if (a.elem[pa] == b.elem[pb])
        {
            c.elem[pc] = a.elem[pa];
            pc++; pa++; pb++;
        }
        else if (a.elem[pa] > b.elem[pb])
        {
            c.elem[pc] = b.elem[pb];  pc++; pb++;
        }
        else {
            c.elem[pc] = a.elem[pa];
            pc++; pa++;
        }
    }
 
    while (pa < a.length)
        c.elem[pc++] = a.elem[pa++];  
    while (pb < b.length)
    {
        c.elem[pc] = b.elem[pb];  pc++; pb++;
    }
    c.length = pc;
    return OK;
}

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2024-04-02 19:53
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    根据你提供的代码,存在一些问题导致溢出和错误的结果。下面是可能导致问题的部分:

    1. 在合并两个顺序表的过程中,为c分配的内存空间大小不正确。c.elem = new ElempType[a.length + b.length];应该改为c.elem = new ElempType[a.length + b.length + 1];,多分配一个位置用于存放最后一个元素。

    2. 在进行元素比较时,使用的是赋值操作符"=",而不是相等比较操作符"=="

    3. 在处理剩余元素时,pa和pb分别表示a和b的下标,但在最后两个while循环中,pa和pb应该分别表示a和b的长度,而不是下标

    解决方案:

    1. 修改代码中的空间分配大小为c.elem = new ElempType[a.length + b.length + 1];

    2. 修改代码中的判断条件,将赋值操作符"="改为相等比较操作符"=="

    3. 修改最后两个while循环中的判断条件,将pa和pb分别修改为a.length和b.length

    修改后的代码如下:

    Status mergeSqlist(const Sqlist& a, const Sqlist& b, Sqlist& c)
    {
        int pc, pa, pb;
        pa = pb = pc = 0;
        c.elem = new ElempType[a.length + b.length + 1];
        if (!c.elem)
        {
            cerr << "the new is fail in merge!" << endl;
            return ERROR;
        }
        while (pa < a.length && pb < b.length)
        {
            if (a.elem[pa] == b.elem[pb])
            {
                c.elem[pc] = a.elem[pa];
                pc++; pa++; pb++;
            }
            else if (a.elem[pa] > b.elem[pb])
            {
                c.elem[pc] = b.elem[pb];
                pc++; pb++;
            }
            else {
                c.elem[pc] = a.elem[pa];
                pc++; pa++;
            }
        }
    
        while (pa < a.length)
            c.elem[pc++] = a.elem[pa++];
        while (pb < b.length)
        {
            c.elem[pc] = b.elem[pb];
            pc++; pb++;
        }
        c.length = pc;
        
        return OK;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月10日
  • 已采纳回答 4月2日
  • 创建了问题 4月2日