代码:


#include "stdio.h"
#include "stdlib.h"
#define M 20 /*自定义数组大小*/
#define Type "%d"
typedef int DataType; /*为现有类型创建同义词,自己可更改数据类型*/
typedef struct
{
DataType array[M]; /*数组*/
int subscript; /*数组最后一个元素的下标*/
} sequencetable; /*自定义数据类型sequenacetable*/
sequencetable *s; /*定义sequencetable类型的指针变量s*/
int flag=0; /*用来标示数组是否初始化了*/
/*函数声明*/
void Initialization();
void Print();
void Insert();
void Delete();
int main(void)
{
int options;
printf("数据结构>>线性表的顺序存储结构\n");
printf("1.初始化顺序表\n");
printf("2.浏览顺序表\n");
printf("3.按位置插入元素\n");
printf("4.按位置删除元素\n");
printf("5.退出\n");
while(1)
{
printf("请选择您要进行的操作:");
scanf("%d",&options);
switch(options)
{
case 1:Initialization();break;
case 2:Print();break;
case 3:Insert();break;
case 4:Delete();break;
case 5:free(s);exit(0);break;
default:printf("请输入数字1-5进行选择!\n");
}
}
return 0;
}
void Delete()
{
int locate,i;
if(flag==0)
{
printf("请先对顺序表初始化!\n");
}
else
{
if(s->subscript==-1)
{
printf("顺序表里暂时没有数据,不能进行删除操作!\n");
}
else
{
printf("请输入您要删除的元素所在的位置(0<位置<=%d):",s->subscript+1);
scanf("%d",&locate);
if(locate>(s->subscript+1))
{
printf("您要删除的元素不存在!\n");
Delete();
}
else
{
if(locate==s->subscript+1)
{
s->subscript--;
}
else
{
for(i=locate;i<=s->subscript;i++)
{
s->array[i-1]=s->array[i];
}
s->subscript--;
}
printf("元素已成功删除!\n");
}
}
}
}
void Insert()
{
int locate,i;
DataType x;
if(flag==0)
{
printf("请先对顺序表进行初始化!\n");
}
else
{
printf("请输入您想要要插入的位置(1-%d):",M);
scanf("%d",&locate);
if(locate<=0||locate>M)
{
printf("您输入的位置不在1-%d之间,请重新输入!\n",M);
Insert();
}
else
{
printf("请输入您要插入的元素:");
scanf(Type,&x);
if(s->subscript<locate-1)
{
s->subscript=locate-1;
s->array[s->subscript]=x;
}
else
{
if(s->subscript==M-1)
{
if(locate==M)
{
s->array[s->subscript]=x;
}
else
{
for(i=s->subscript-1;i>=locate-1;i--)
{
s->array[i+1]=s->array[i];
}
s->array[locate-1]=x;
}
}
else
{
s->subscript++;
for(i=s->subscript-1;i>=locate-1;i--)
{
s->array[i+1]=s->array[i];
}
s->array[locate-1]=x;
}
}
printf("元素已成功插入顺序表!\n");
}
}
}
void Print()
{
int i;
if(flag==0)
{
printf("请先对顺序表初始化!\n");
}
else if(s->subscript==-1)
{
printf("顺序表里暂时没有数据!\n");
}
else
{
for(i=0;i<=s->subscript;i++)
{
printf(Type,s->array[i]);
printf(" ");
}
printf("\n");
}
}
void Initialization()
{
s=(sequencetable *)malloc(sizeof(sequencetable)); /*为顺序表申请内存空间*/
s->subscript=-1;
flag=1;
printf("顺序表初始化已完成!\n");
}