OJ顺序表插入元素本地过了OJ报错,求各位帮我找找疏漏之处

OJ顺序表插入元素本地过了OJ报错,求各位帮我找找疏漏之处

这是OJ问题描述

img

#include
#include
#include
#define ERROR -1
#define OK 1
#define LISTSIZE 102

typedef int status;
typedef int elementtype;
typedef struct sqlist
{
    elementtype* data[LISTSIZE];
    int len;
}sqlist;

status initlist(sqlist* L)
{
    L->len = 0;
    return OK;
}
status getlist(sqlist* L)
{
    int i = 0;
    int j = 0, state=2;
    char c = getchar();
    while (isdigit(c))
    {
        state = 0;
        L->data[i] = c - '0' + j;
        j = (L->data[i]);
        j *= 10;
        while ((c = getchar()) == ' ' || c == '\t')
            state = 1;
        i += state;
        L->len += state;
        j *= (1 - state);
    }
    if(state!=2)
        L->len++;
    return OK;
}
status insert_sqlist(sqlist* va, int x)
{
    int i;
    if (va->len + 1 > LISTSIZE)
        return ERROR;
    va->len++;
    for (i = va->len - 1; va->data[i] > x && i >= 0; i--)
        va->data[i + 1] = va->data[i];
    va->data[i + 1] = x;
    return OK;
}

main()
{
    sqlist va;
    int i, x;
    initlist(&va);
    getlist(&va);
    scanf_s("%d", &x);
    insert_sqlist(&va, x);
    for (i = 0; i < va.len; i++)
        printf("%d ", va.data[i]);
    //printf("\n");
}

运行结果

img

img

可见一般情况和顺序表为空的情况都没有问题
之前发现输入顺序表正好为LISTSIZE或LISTSIZE-1时会出错,所以把LISTSIZE改为102,OJ依然显示答案错误
我真的不知道自己错在哪里了,烦请各位大师帮忙555

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在代码中有几个问题:

  1. 定义 elementtype* data[LISTSIZE] 应该改为 elementtype data[LISTSIZE]。因为 elementtype* data[LISTSIZE] 定义的是一个指针数组,而应该定义的是一个元素类型的数组,每个元素都是一个 elementtype 类型的变量。

  2. insert_sqlist() 函数中,插入的元素 x 应该是 int 类型,而不是 elementtype 类型的指针。应该将函数参数中的 int x 改为 elementtype x。

修改后的代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

#define ERROR -1
#define OK 1
#define LISTSIZE 102

typedef int status;
typedef int elementtype;

typedef struct sqlist
{
    elementtype data[LISTSIZE];
    int len;
} sqlist;

status initlist(sqlist* L)
{
    L->len = 0;
    return OK;
}

status getlist(sqlist* L)
{
    int i = 0;
    int j = 0, state = 2;
    char c = getchar();
    while (isdigit(c))
    {
        state = 0;
        L->data[i] = c - '0' + j;
        j = (L->data[i]);
        j *= 10;
        while ((c = getchar()) == ' ' || c == '\t')
            state = 1;
        i += state;
        L->len += state;
        j *= (1 - state);
    }
    if (state != 2)
        L->len++;
    return OK;
}

status insert_sqlist(sqlist* va, elementtype x)
{
    int i;
    if (va->len + 1 > LISTSIZE)
        return ERROR;
    va->len++;
    for (i = va->len - 1; va->data[i] > x && i >= 0; i--)
        va->data[i + 1] = va->data[i];
    va->data[i + 1] = x;
    return OK;
}

int main()
{
    sqlist va;
    int i, x;
    initlist(&va);
    getlist(&va);
    scanf_s("%d", &x);
    insert_sqlist(&va, x);
    for (i = 0; i < va.len; i++)
        printf("%d ", va.data[i]);
    printf("\n");
    return 0;
}


这样修改后,就可以正常地插入元素并输出结果了。