TTD-2016 2023-01-29 00:23 采纳率: 100%
浏览 426
已结题

已知线性表La和Lb中的数据元素按值非递减有序排列,现要求La和Lb归并排序为Lc 我想知道我这段rank中a和b表的元素为什么只传递了1和2给c,后续就不在执行了?

已知线性表La和Lb中的数据元素按值非递减有序排列,现要求La和Lb归并排序为Lc
我想知道我这段rank中a和b表的元素为什么只传递了1和2给c,后续就不在执行了?

img


代码如下
#include <stdio.h>


#define MAX 100
typedef int Status;
int e;
typedef struct {
    int data[MAX];
    int length;
}Slist;
int insert(Slist *L, int i, int e) {
    if (i<1 || i>L->length + 1)
        return 0;
    for (int j = L->length; j >= i; j--)
        L->data[j] = L->data[j-1];
    L->data[i - 1] = e;
    L->length++;
    return true;
}
Status GetElem(Slist* L, int i,int& e){
        if (i<0 || i>L->length)
            return 0;
    e = L->data[i];
    return e;
}
Status locate(Slist L,int e) {
    for (int i = 0; i < L.length; i++)
        if (L.data[i] == e)
            return i + 1;
    return 0;
}
int length(Slist L){
    return L.length;
}
Status  rank(Slist a,Slist b ) {
    int ea;
    int eb;
    Slist c{};
    c.length = 0;
    for (int k = 0; k < (a.length+b.length); k++) {
        GetElem(&a, k, ea);
        GetElem(&b, k, eb);
        if (ea <= eb);
        insert(&c, k+1, ea);
        insert(&c, k+2, eb);
        return 0;
    }
}
int main() {
    Slist La{};
    La.length = 0;
    Slist Lb{};
    Slist Lc{};
    Lb.length = 0;
    Lc.length = 0;
    insert(&La, 1, 1);
    insert(&La, 2, 7);
    insert(&La, 3, 8);
    insert(&Lb, 1, 2);
    insert(&Lb, 2, 4);
    insert(&Lb, 3, 6);
    insert(&Lb, 4, 8);
    insert(&Lb, 5, 10);
    insert(&Lb, 6, 11);
    rank(La,Lb);
}

rank函数的运行结果:

img

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-01-29 09:42
    关注

    修改完善如下,供参考:

    #include <stdio.h>
    #define MAX 100
    typedef int Status;
    int e;
    typedef struct {
        int data[MAX];
        int length;
    }Slist;
    int insert(Slist* L, int i, int e) {
        if (i<1 || i>L->length + 1)
            return 0;
        for (int j = L->length; j >= i; j--)
            L->data[j] = L->data[j - 1];
        L->data[i - 1] = e;
        L->length++;
        return true;
    }
    Status GetElem(Slist* L, int i, int& e) {
        if (i<0 || i>L->length)
            return 0;
        e = L->data[i];
        return e;
    }
    Status locate(Slist L, int e) {
        for (int i = 0; i < L.length; i++)
            if (L.data[i] == e)
                return i + 1;
        return 0;
    }
    int length(Slist L) {
        return L.length;
    }
    Status  rank(Slist a, Slist b, Slist* c) {  //修改
        Status ea, eb, ia = 0, ib = 0, ic = 1;
        while (ia < a.length && ib < b.length) 
        {
            GetElem(&a, ia, ea);
            GetElem(&b, ib, eb);
            if (ea <= eb){
                insert(c, ic, ea);
                ia++;
            }
            else {
                insert(c, ic, eb);
                ib++;
            }
            ic++;
        }
        while (ia < a.length) {
            GetElem(&a, ia, ea);
            insert(c, ic, ea);
            ia++; ic++;
        }
        while (ib < b.length) {
            GetElem(&b, ib, eb);
            insert(c, ic, eb);
            ib++; ic++;
        }
        return 0;
        //Slist c{};
        //c.length = 0;
        //for (int k = 0; k < (a.length + b.length); k++) {
        //    GetElem(&a, k, ea);
        //    GetElem(&b, k, eb);
        //    if (ea <= eb);
        //    insert(&c, k + 1, ea);
        //    insert(&c, k + 2, eb);
        //    return 0;
        //}
    }
    void print(Slist L)   //修改
    {
        int i;
        for (i = 0; i < L.length; i++)
            printf("%d ", L.data[i]);
        printf("\n");
    }
    int main() {
        Slist La{};
        La.length = 0;
        Slist Lb{};
        Lb.length = 0;
        Slist Lc{};
        Lc.length = 0;
    
        insert(&La, 1, 1);
        insert(&La, 2, 7);
        insert(&La, 3, 8);
        insert(&Lb, 1, 2);
        insert(&Lb, 2, 4);
        insert(&Lb, 3, 6);
        insert(&Lb, 4, 8);
        insert(&Lb, 5, 10);
        insert(&Lb, 6, 11);
    
        printf("La:");
        print(La);
        printf("Lb:");
        print(Lb);
    
        rank(La, Lb, &Lc);
        printf("Lc:");
        print(Lc);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月8日
  • 已采纳回答 1月31日
  • 创建了问题 1月29日

悬赏问题

  • ¥15 MATLAB代码补全插值
  • ¥15 Typegoose 中如何使用 arrayFilters 筛选并更新深度嵌套的子文档数组信息
  • ¥15 前后端分离的学习疑问?
  • ¥15 stata实证代码答疑
  • ¥50 husky+jaco2实现在gazebo与rviz中联合仿真
  • ¥15 dpabi预处理报错:Error using y_ExtractROISignal (line 251)
  • ¥15 在虚拟机中配置flume,无法将slave1节点的文件采集到master节点中
  • ¥15 husky+kinova jaco2 仿真
  • ¥15 zigbee终端设备入网失败
  • ¥15 金融监管系统怎么对7+4机构进行监管的