#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20

typedef struct LNODE {
char list[MAXSIZE];
int listlen;//表的当前长度
}*List,L;

List newList();
void showList(List Ptrl);
void insert(List Ptrl, char x, int i);
void delete(List Ptrl, int i);

int main()
{
List L = newList();
int insertPlace;
char insertElem;
int deletePlace;
printf("列表初始化为:\n");
showList(L);
printf("\n");

//插入操作
printf("请给出两个数据,表示你要插入的数据与位置:\n");
scanf("%c%d", &insertElem, &insertPlace);
printf("插入前的数据为:\n");
showList(L);
printf("\n");

insert(L, insertElem, insertPlace);
printf("插入后的元素排列如下:\n");
showList(L);
printf("\n");
printf("\n");

//删除数据
printf("请给出你要删除的位置:\n");
scanf("%d", &deletePlace);
printf("删除前的数据为:\n");
showList(L);
printf("\n");

delete(L, deletePlace);
printf("进行删除操作后的元素列表为:\n");
showList(L);
printf("\n");
printf("\n");
return 0;
}

//初始化顺序表
List newList()
{
List Ptrl = (List)malloc(sizeof(L));
char arr[] = { 'a','j','c','n','i','y','d','u','\0' };
int i = 0;
Ptrl->listlen = 0;
while (arr[i] != '\0')
{
Ptrl->list[i] = arr[i];
Ptrl->listlen++;
i++;
}
return Ptrl;
}

void insert(List Ptrl, char x, int i)
{
int j;
if (i<0 || i>MAXSIZE)
{
printf("插入位置不对");
return;
}
if (Ptrl->listlen == MAXSIZE)
{
printf("表满\n");
return;
}
for (j = Ptrl->listlen - 1; j >= i; j--)
{
Ptrl->list[j] = Ptrl->list[j - 1];
}
Ptrl->list[j] = x;
}

//删除i位置的元素
void delete(List Ptrl, int i)
{
int j;
if (i<0 || i>MAXSIZE)
{
printf("删除位置不对\n");
return;
}
if (Ptrl->listlen == 0)
{
printf("空表\n");
return;
}
for (j = i - 1; j <= Ptrl->listlen - 1; j++)
Ptrl->list[j] = Ptrl->list[j + 1];
Ptrl->listlen--;

}


//显示当前表内容
void showList(List Ptrl)
{
int i;
for (i = 0; i < Ptrl->listlen; i++)
{
printf("%c", Ptrl->list[i]);
}
}