coder进行时 2023-08-06 22:29 采纳率: 100%
浏览 4
已结题

这是一个数据结构线性表 输出结果不对 很难受有疑问

如下:

一道 c语言数据结构的题

算法就是求 B中不包含A的 插入A队列 然后输出A 想知道在哪里如何修正

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define OVERFLOW 3
#define OK 1
#define ERROR 0
typedef struct
{//顺序表的存储结构
    int* elem;//存储空间的基地址
    int length;
}SqList;
int InitList(SqList& L) {
    L.elem = new int[MAXSIZE];//为顺序表分配一个大小为MAXSIZE的数组空间
    if (!L.elem)
        exit(OVERFLOW);//存储分配失败退出
    L.length = 0;
    return OK;
}
int ListInsert(SqList& L, int i, int e) {
    if ((i < 1) || i > L.length + 1)
        return ERROR;
    if (L.length == MAXSIZE)
        return ERROR;
    for (int j = L.length; j >= i; j--) {
        L.elem[j ] = L.elem[j-1];
    }
    L.elem[i - 1] = e;
    ++L.length;
    return OK;
}
int GetElem(SqList L, int i, int& e) {
    if (i<1 || i>L.length)
        return ERROR;
    e = L.elem[i - 1];
    return OK;
}
int LocateElem(SqList L, int e) {
    for (int i = 0; i < L.length; i++) {
        if (L.elem[i] == e)
            return i + 1;
        return 0;
    }
}
void MergeList(SqList& La, SqList Lb) {
    //将所有在线性表LB当不在线性表La中的数据元素插入到LA中
    int m = La.length;
    int n = Lb.length;
    int e;
    for (int i = 1; i <= n; i++) {
        GetElem(Lb, i,e);
        if (!LocateElem(La, e)) {
            ListInsert(La, ++m, e);
        }
        
    }
}
int main() {
    SqList A;
    SqList B;
    InitList(A);
    InitList(B);
    ListInsert(A,1,7);
    ListInsert(A,2,5);
    ListInsert(A,3,3);
    ListInsert(A,4,11);
    ListInsert(B,1,2);
    ListInsert(B,2,6 );
    ListInsert(B,3,3);
    for (int i = 0; i < A.length; i++) {
        printf("%d,", A.elem[i]);
    }
    printf("\n");
    MergeList(A, B);
    for (int i = 0; i < A.length; i++) {
        printf("%d,", A.elem[i]);
    }
}

img


*

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-08-06 22:47
    关注

    问题在 int LocateElem(SqList L, int e) 函数里,修改如下,改动处见注释,供参考:

    int LocateElem(SqList L, int e) {
        for (int i = 0; i < L.length; i++) {
            if (L.elem[i] == e)
                return i + 1;
            //return 0;  修改 这行移动到for(){}外面
        }
        return 0; // 修改 移动到这里
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月14日
  • 已采纳回答 8月6日
  • 创建了问题 8月6日

悬赏问题

  • ¥15 安霸cv22 + rtl8211f 千兆,udp传输丢包
  • ¥15 关于区块链和边缘环境搭建的相关问题
  • ¥15 windows远程桌面断卡重连软件卡顿问题
  • ¥30 Unity 实现扫描效果
  • ¥15 HbuilderX检测不到安卓模拟器
  • ¥15 这个main已经在filename.obj中定义是什么错 C语言
  • ¥15 关于#linux#的问题:exsi8.0系统 怎么更改web访问端口,不用80、443
  • ¥15 使用elementor设计样式
  • ¥15 谁能提供一个中文版的推销咨询网站连接?
  • ¥15 springboot项目程序启动报错