OJ顺序表插入元素本地过了OJ报错,求各位帮我找找疏漏之处
这是OJ问题描述
#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");
}
运行结果
可见一般情况和顺序表为空的情况都没有问题
之前发现输入顺序表正好为LISTSIZE或LISTSIZE-1时会出错,所以把LISTSIZE改为102,OJ依然显示答案错误
我真的不知道自己错在哪里了,烦请各位大师帮忙555
该回答引用GPTᴼᴾᴱᴺᴬᴵ
在代码中有几个问题:
定义 elementtype* data[LISTSIZE] 应该改为 elementtype data[LISTSIZE]。因为 elementtype* data[LISTSIZE] 定义的是一个指针数组,而应该定义的是一个元素类型的数组,每个元素都是一个 elementtype 类型的变量。
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;
}
这样修改后,就可以正常地插入元素并输出结果了。