Fridayup 2022-09-18 21:54 采纳率: 87.5%
浏览 29
已结题

合并顺序表问题 望指导

合并顺序表(不含重复) 不知道为什么最后合并的顺序表LA为空表

#include<stdio.h>
#define MAXSIZE 100
//定义顺序表
typedef struct{
    int *elem;
    int length;
}SqList; 
//初始化顺序表
int InitList(SqList &L){
    L.elem=new int [MAXSIZE];  //分配一个长度为MAXSIZE的数组 
    if(!L.elem) return 0;      //分配失败退出 
    L.length=0;                //空表
    return 1; 
} 
//输入值 
int ListOutput(SqList &L,int n){
    int i;
    for(i=0;i<n;i++){
        scanf("%d",&L.elem[i]);
        L.length++; 
    }
    return 1;
} 
//取值
int GetElem(SqList L,int i,int &e){
    if(i<1||i>L.length){
        printf("位置有错\n");
        return 0;
    }
    e=L.elem[i-1];
    return 1;
}
//输出顺序表
int ShowList(SqList &L){
    int i;
    if(L.length==0){
        printf("表为空\n");
        return 0;
    }
    printf("该顺序表元素有:\n");
    for(i=0;i<L.length;i++){
        printf("%d ",L.elem[i]);
    }
    printf("\n");
    return 1;
}
//插入
int ListInsert(SqList &L,int i,int e){
    if((i<1)||(i>L.length+1))  return 0;
    if(L.length==MAXSIZE) return 0;
    for(int j=L.length-1;j>=i-1;j--){
        L.elem[j+1]=L.elem[j]; 
    }
    L.elem[i-1]=e;
    L.length++;
    return 0;
}
//合并 
int MergeList_Sq(SqList LA, SqList LB){
    int a_len=LA.length,b_len=LB.length;
    for(int i=0;i<b_len;i++){
        int num,flag=0;
        GetElem(LB,i+1,num);
        for(int j=0;j<a_len;j++){
            if(num==LA.elem[j]){
                flag=1; 
                break;
            }
        }
        if(flag==0){
             ListInsert(LA,a_len++,num);
        }
   }
   return 1; 
} 
int main(){
    SqList LA,LB;
    int a,b;
    
    printf("请输入想要输入LA的元素个数:\n");
    scanf("%d",&a);
    printf("请输入想要输入LA的元素:\n");
    ListOutput(LA,a);
    InitList(LA);[](
    
    printf("请输入想要输入LB的元素个数:\n");
    scanf("%d",&b);
    printf("请输入想要输入LB的元素:\n");
    InitList(LB);
    ListOutput(LB,b);
    
    
    MergeList_Sq(LA,LB);
    print("合并后的LA为:\n"); 
    ShowList(LA);
    
    return 0;
} 
不知道 LA为什么是空表
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-09-19 00:53
    关注

    修改处见注释,供参考:

    #include<stdio.h>
    #define MAXSIZE 100
    //定义顺序表
    typedef struct{
        int *elem;
        int length;
    }SqList;
    //初始化顺序表
    int InitList(SqList &L){
        L.elem=new int [MAXSIZE];  //分配一个长度为MAXSIZE的数组
        if(!L.elem) return 0;      //分配失败退出
        L.length=0;                //空表
        return 1;
    }
    //输入值
    int ListOutput(SqList &L,int n){
        int i;
        for(i=0;i<n;i++){
            scanf("%d",&L.elem[i]);
            L.length++; 
        }
        return 1;
    }
    //取值
    int GetElem(SqList L,int i,int &e){
        if(i<1||i>L.length){
            printf("位置有错\n");
            return 0;
        }
        e=L.elem[i-1];
        return 1;
    }
    //输出顺序表
    int ShowList(SqList &L){
        int i;
        if(L.length==0){
            printf("表为空\n");
            return 0;
        }
        printf("该顺序表元素有:\n");
        for(i=0;i<L.length;i++){
            printf("%d ",L.elem[i]);
        }
        printf("\n");
        return 1;
    }
    //插入
    int ListInsert(SqList &L,int i,int e){
        if((i<1)||(i>L.length+1))  return 0;
        if(L.length==MAXSIZE) return 0;
        for(int j=L.length-1;j>=i-1;j--){
            L.elem[j+1]=L.elem[j]; 
        }
        L.elem[i-1]=e;
        L.length++;
        return 0;
    }
    //合并 
    int MergeList_Sq(SqList &LA, SqList LB){ //(SqList LA, SqList LB) 修改
        int a_len=LA.length,b_len=LB.length;
        for(int i=0;i<b_len;i++){
            a_len=LA.length;    //修改
            int num,flag=0;
            GetElem(LB,i+1,num);
            for(int j=0;j<a_len;j++){
                if(num==LA.elem[j]){
                    flag=1;
                    break;
                }
            }
            if(flag==0){
                 ListInsert(LA,a_len+1,num); //(LA,a_len++,num); 修改
            }
       }
       return 1; 
    } 
    int main(){
        SqList LA,LB;
        int a,b;
        
        printf("请输入想要输入LA的元素个数:\n");
        scanf("%d",&a);
        printf("请输入想要输入LA的元素:\n");
        InitList(LA);//[](    修改
        ListOutput(LA,a);  // 修改
    
        printf("请输入想要输入LB的元素个数:\n");
        scanf("%d",&b);
        printf("请输入想要输入LB的元素:\n");
        InitList(LB);
        ListOutput(LB,b);
        
        
        MergeList_Sq(LA,LB);
        printf("合并后的LA为:\n"); //修改 print();
        ShowList(LA);
        return 0;
    } 
    //不知道 LA为什么是空表
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月27日
  • 已采纳回答 9月19日
  • 创建了问题 9月18日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助