编辑代码

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

typedef struct {
    int *data;
    int len;
    int size;
} SEQUENLIST;

void INITIATE(SEQUENLIST *L) {
    L->data = (int *)malloc(10 * sizeof(int));
    L->len = 0;
    L->size = 10;
}

int INSERT(SEQUENLIST *L, int i, int x) {
    if (i < 1 || i > L->len + 1) {
        printf("插入位置错误!\n");
        return 0;
    }
    if (L->len >= L->size) {
        L->data = (int *)realloc(L->data, (L->size + 10) * sizeof(int));
        L->size += 10;
    }
    for (int j = L->len; j >= i; j--)
        L->data[j] = L->data[j - 1];
    L->data[i - 1] = x;
    L->len++;
    return 1;
}

int GET(SEQUENLIST *L, int i) {
    if (i < 1 || i > L->len) {
        printf("读取位置错误!\n");
        return -1;
    }
    return L->data[i - 1];
}

int LOCATE(SEQUENLIST *L, int x) {
    for (int i = 0; i < L->len; i++)
        if (L->data[i] == x)
            return i + 1;
    return -1;
}

int DELETE(SEQUENLIST *L, int i) {
    if (i < 1 || i > L->len) {
        printf("删除位置错误!\n");
        return 0;
    }
    for (int j = i; j < L->len; j++)
        L->data[j - 1] = L->data[j];
    L->len--;
    return 1;
}

int EMPTY(SEQUENLIST *L) {
    return L->len == 0;
}

int main() {
    SEQUENLIST list, *L;
    int i, j;
    L = &list;
    INITIATE(L);
    printf("输入线性表的元素,-99结束:\n");
    scanf("%d", &i);
    j = 1;
    while (i != -99) {
        INSERT(L, j, i);
        j++;
        scanf("%d", &i);
    }
    for (i = 1; i <= L->len; i++)
        printf("%d\t", GET(L, i));
    printf("\n");
    printf("输入要查找的元素值:");
    scanf("%d", &i);
    printf("该元素在线性表中的位置为:%d\n", LOCATE(L, i));
    i = 1;
    while (!EMPTY(L)) {
        DELETE(L, i);
        i++;
    }
    if (EMPTY(L))
        printf("\n线性表已空!");
    return 0;
}