typedef struct {
int *data;
int MaxSize;
int length;
} SeqList;
void InitList(SeqList *L) {
L->data = (int *)malloc(InitMaxSize * sizeof(int));
L->MaxSize = InitMaxSize;
L->length = 0;
}
void IncreaseSize(SeqList *L, int newSize) {
if (newSize <= L->MaxSize) return;
int *newData = (int *)malloc(newSize * sizeof(int));
for (int i = 0; i < L->length; i++) {
newData[i] = L->data[i];
}
free(L->data);
L->data = newData;
L->MaxSize = newSize;
}
int Insert(SeqList *L, int pos, int val) {
if (pos < 1 || pos > L->length + 1) return 0;
if (L->length >= L->MaxSize) {
IncreaseSize(L, L->MaxSize + 5);
}
for (int i = L->length; i >= pos; i--) {
L->data[i] = L->data[i - 1];
}
L->data[pos - 1] = val;
L->length++;
return 1;
}
int Delete(SeqList *L, int pos) {
if (pos < 1 || pos > L->length) return 0;
for (int i = pos; i < L->length; i++) {
L->data[i - 1] = L->data[i];
}
L->length--;
return 1;
}
void Traverse(SeqList *L) {
for (int i = 0; i < L->length; i++) {
printf("%d ", L->data[i]);
}
printf("\n");
}
void DestroyList(SeqList *L) {
free(L->data);
L->data = NULL;
L->MaxSize = 0;
L->length = 0;
}
int main() {
SeqList L;
InitList(&L);
Insert(&L, 1, 10);
Insert(&L, 2, 20);
Insert(&L, 3, 30);
printf("插入 3 个元素后:");
Traverse(&L);
for (int i = 4; i <= 10; i++) {
Insert(&L, i, i * 10);
}
printf("扩容后插入元素:");
Traverse(&L);
Delete(&L, 3);
printf("删除第 3 个元素后:");
Traverse(&L);
DestroyList(&L);
return 0;
}