样例过了,但是最后只有40分,wa了3个点

Description

实现一个顺序线性表的初始化、插入、删除、访问、清空等操作,调用这些操作,实现如下功能:

1.I a b,在顺序表的第a位置插入元素b;

2.D a,删除顺序表中位序为a的元数,并输出该元素值;

3.G a,输出顺序表中位序为a的元数值;

4.L a,输出顺序表中元素值为a的第一个位置;

5.C,清空顺序表中的所有元数;

顺序表的定义如下:

  typedef int ElemType; 
   typedef struct    {

           ElemType *elem;

           int length;

           int listsize;

   } Sqlist;

Input

第一行有两个整数n,m分别表示初始线性表的长度和操作的个数,下面有m行,每一行都是上面5个操作中的一个。

Output

输出操作要求的输出。

Sample Input
5 6
1 2 3 4 5
D 3
D 1
G 1
G 2
G 3
L 4

Sample Output
3
1
2
4
5
2


#include<stdio.h>
#include<stdlib.h>
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
#define size 1000
typedef int elemtype;
typedef int status;
#define len 10
typedef struct 
{
    elemtype* elem;
    int length;
    int listsize;
}sqlist;
status initlist(sqlist& l)
{
    l.elem = (elemtype*)malloc(sizeof(elemtype) * size);
    if (!l.elem)
    {
        exit(overflow);
    }
    l.length = 0;
    l.listsize = size;
    return ok;
}
void clear(sqlist& l)
{
    l.length = 0;
}
int locateelem(sqlist l, elemtype e)
{
    int i;
    for ( i = 0; i <l.length; i++)
    {
        if (l.elem[i]==e)
        {
            return i + 1;
        }
    }
    return error;

}
int  getelem(sqlist l, int i, elemtype& e)
{
    if (i<1||i>l.length)
    {
        return error;
    }
    e = l.elem[i - 1];
    return ok;
}
status listinsert(sqlist& l, int i, elemtype e)
{
    elemtype* newbase;
    if (i<1||i>l.length+1)
    {
        return error;
    }
    if (l.length>=l.listsize)
    {
        newbase = (elemtype*)realloc(l.elem, (l.listsize + len) * sizeof(elemtype));
        if (!newbase)
        {
            exit(overflow);
        }
        l.elem = newbase;
        l.listsize += len;
    }
    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 ok;
}
status listdelete(sqlist& l, int i, elemtype& e)
{
    if (i<1||i>l.length)
    {
        return error;
    }
    if (l.length==0)
    {
        return error;
    }
    e = l.elem[i - 1];
    for (int j =i-1 ; j < l.length-1; j++)
    {
        l.elem[j] = l.elem[j + 1];
    }
    l.length--;
    return ok;
}
int main()
{
    int n, m;
    scanf("%d%d", &n, &m);
    sqlist l;
    if (initlist(l))
    {
        int k;
        for (int i = 0; i < n; i++)
        {
            scanf("%d",&k);
            listinsert(l, i + 1, k);
        }
        char a;
        int b;
        while(m--)
        {
            getchar();
            scanf("%c%d", &a,&b);
            if (a=='D')
            {
                elemtype e;
                listdelete(l, b, e);
                printf("%d\n", e);
            }
            if (a=='G')
            {
                elemtype e;
                getelem(l, b, e);
                printf("%d\n", e);
            }
            if (a=='L')
            {
                elemtype e;
                e = b;
                printf("%d\n", locateelem(l, e));
            }
            if (a=='I')
            {
                elemtype e;
                scanf("%d", &e);
                listinsert(l, b, e);
            }
            if (a=='C')
            {
                clear(l);
            }
        }
    }
    return 0;
}