#include <stdio.h>
#include <stdlib.h>
#define List_Init_Size 100 // 容量
#define ListIncrement 10 // 分配增量
int n;
typedef struct
{
int *elem;
int length;
int listsize; // 容量
} Sqlist;
void InitList_Sq(Sqlist *L)
{
L->elem = (int *)malloc(100 * sizeof(int));
if (!L->elem)
{
exit(EXIT_FAILURE);
}
L->length = 0;
L->listsize = List_Init_Size;
} // 初始化操作
int ListInsert_Sq(Sqlist *L, int i, int e)
{
if (L->length == L->listsize)
{
L->elem = (int *)malloc((List_Init_Size + ListIncrement) * sizeof(int));
}
if (i < 1 || i > L->length + 1)
{
return 1;
}
int *q, *p;
q = L->elem + i - 1;
p = L->elem + L->length - 1;
while (p >= q)
{
*(p + 1) = *p;
p--;
}
*q = e;
L->length++;
return 0;
} // 添加元素
int ListDelete_Sq(Sqlist *L, int i, int *e)
{
if (i < 1 || i > L->length)
{
return 2;
}
int *p;
p = &L->elem[i - 1];
*e = *p;
p++;
while (p <= L->elem + L->length - 1)
{
*(p - 1) = *p;
p++;
}
L->length--;
return 0;
} // 删除操作
int main()
{
int i, x, temp, e;
Sqlist list;
void InitList_Sq(Sqlist * L);
int ListInsert_Sq(Sqlist * L, int i, int e);
int ListDelete_Sq(Sqlist * L, int i, int *e);
InitList_Sq(&list);
printf("please input the number for n\n");
scanf("%d", &n);
printf("n=%d", n);
list.length = n;
for (i = 0; i < n; i++)
{
scanf("%d", &list.elem[i]);
printf("list[%d]=%d", i, list.elem[i]);
}
printf("The list before insertion is\n");
for (i = 0; i < n; i++)
{
printf("%d", list.elem[i]);
}
printf("\n");
printf("please input the position where you want to insert a value\nposition=");
scanf("%d", &i);
printf("please input the value you want to insert\nx=");
scanf("%d", &x);
temp = ListInsert_Sq(&list, i, x);
switch (temp)
{
case 0:
printf("The insertion is successful!\n");
printf("The list is after insertion is\n");
for (i = 0; i < list.length; i++)
{
printf("%d", list.elem[i]);
}
printf("\n");
break;
case 1:
printf("The insertion is not successful!\n");
break;
}
printf("The list before deleting is\n");
for (i = 0; i < list.length; i++)
{
printf("%d", list.elem[i]);
}
printf("\n");
printf("please input the where you want to delete a value\nposition=");
scanf("%d", &i);
temp = ListDelete_Sq(&list, i, &e);
switch (temp)
{
case 0:
printf("The deleting is successful!\n");
printf("The list is after deleting is\n");
for (i = 0; i < list.length; i++)
{
printf("%d", list.elem[i]);
}
printf("\n");
break;
case 2:
printf("The deleting is not successful!\n");
break;
}
return 0;
}