#include <stdio.h>
#include <stdlib.h>
//顺序表的最大容量
#define MAXLISTSIZE 1024
typedef struct {
int data[MAXLISTSIZE];
int last;
} linearlist;
/*
打印顺序表
*/
void ListList(linearlist *list)
{
int i;
printf("当前线性表的状态:\n");
if(list -> last == 0)
{
printf("当前顺序表为空\n");
}
else
{
//遍历整个顺序表
for(int i = 0; i < (list ->last); i++)
{
printf("%d ",list ->data[i]);
}
printf("\n");
}
}
/*
屏幕输出
*/
void Output(linearlist *list)
{
system("cls");
printf("顺序表\n");
printf("a:追加一个节点\n");
printf("i:插入一个节点\n");
printf("d:删除一个节点\n");
printf("e:退出\n");
ListList(list);
}
/*
创建顺序表
*/
linearlist* CreateList()
{
linearlist * list = (linearlist*)malloc(sizeof(linearlist));
list -> last = 0;
return list;
}
/*
在顺序表末尾添加节点
*/
void AppendNode(linearlist *list,int n)
{
if(list ->last < MAXLISTSIZE)
{
list -> data[list -> last] = n;
list -> last += 1;
}
}
/*
在指定位置插入节点
*/
void InsertNode(linearlist *list,int n,int pos)
{
int j;
if(pos < 0|| pos > list ->last )
{
printf("所插入的位置超出顺序表的范围\n");
}
else
{
for(j = list -> last; j >= pos; j--)
{
list ->data[j + 1] = list -> data[j];
}
list -> data[pos] = n;
list -> last++;
}
}
/*
删除指定位置的节点
*/
void DeleteNode(linearlist * list,int pos)
{
int j;
if((pos < 0) || (pos > list -> last))
{
printf("所要删除的位置超过顺序表的范围\n");
}
else
{
for(j = pos; j < list -> last; j++)
{
list ->data[j] = list -> data[j + 1];
}
list -> last --;
}
}
int main()
{
int key ,pos;
char ch;
linearlist *list;
list = CreateList();
while(1)
{
Output(list);
ch = getchar();
fflush(stdin);
switch (ch) {
case 'a':
printf("请输入要追加的数据:\n");
scanf("%d",&key);
AppendNode(list,key);
break;
case 'i':
printf("请输入要插入的数据的位置:\n");
scanf("%d",&pos);
printf("请输入要插入的数据:\n");
scanf("%d",&key);
InsertNode(list,key,pos);
break;
case 'd':
printf("请输入要删除的数据的位置:\n");
scanf("%d",&pos);
DeleteNode(list,pos);
break;
case 'e':
exit(0);
Output(list);
fflush(stdin);
break;
default:
break;
}
}
return 0;
}