#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;
}