要求设计菜单,根据菜单提示进行操作∶插入一个新元素到第i个位置;删除第i个位置的元素;显示线性表中所有元素的值;检索表中第i个元素;求表的长度等运算。
具体编程如下:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100 //顺序表可能达到的最大长度
typedef int ElemType;
//结构体
typedef struct
{
ElemType *data; //存储空间的基地址
int length; //当前长度
}SqList; //顺序表的结构类型为SqList
//顺序表初始化
void InitList(SqList *L)
{
L->data=(ElemType*)malloc(MAXSIZE*sizeof(ElemType));
if(!L->data)
{
printf("顺序表初始化错误!\n");
}
else
{
L->length=0;
printf("顺序表已初始化为空表\n");
}
printf("\n");
}
//对顺序表进行顺序插入元素
void InsertData(SqList *L,int n)
{
int i;
ElemType e;
printf("顺序表顺序插入的数据为:");
for(i=0;i<n;i++)
{
scanf("%d",&e);
L->data[i] = e;
}
L->length = n;
}
//显示顺序表中所有元素的值
void ShowData(SqList *L)
{
int i;
printf("当前顺序表中的数据为:");
for(i=0;i<L->length;i++)
{
printf("%d ",L->data[i]);
}
printf("\n");
}
//求表的长度
void ShowLength(SqList *L)
{
printf("当前顺序表的表长为:%d",L->length);
printf("\n");
}
//插入一个新元素到第i个位置
void ListInsert(SqList *L,int i,ElemType e)
{
int j;
if(i<1||i>L->length+1)
{
printf("插入i值不合法!");
}
if(L->length==MAXSIZE)
{
printf("存储空间已满,无法插入!");
}
for(j=L->length-1;j>=i-1;j--)
{
L->data[j+1]=L->data[j];
}
L->data[i-1]=e;
++L->length;
printf("新元素成功插入");
printf("\n");
}
//删除第i个位置的元素
void ListDelete(SqList *L,int i)
{
int j;
if((i<1)||(i>L->length))
{
printf("删除i值不合法!");
}
for(j=i;j<=L->length-1;j++)
{
L->data[j-1]=L->data[j];
}
--L->length;
printf("指定元素成功删除");
printf("\n");
}
//检索表中第i个元素
void GetElen(SqList *L,int i)
{
ElemType e;
if(i<1||i>L->length)
{
printf("检索i值不合法!");
}
else
{
e = L->data[i-1];
printf("表中第%d个元素检索为:%d",i,e);
}
printf("\n");
}
int main()
{
SqList L;
InitList(&L);
printf("\n");
int n;
printf("你想输入的数据个数为:\n");
scanf("%d",&n);
InsertData(&L,n);
ShowData(&L);
ShowLength(&L);
int i,e;
printf("请输入要插入的位置和相应值:\n");
scanf("%d %d",&i,&e);
ListInsert(&L,i,e);
ShowData(&L);
int j;
printf("请输入要删除的位置:\n");
scanf("%d",&j);
ListDelete(&L,j);
ShowData(&L);
int m;
printf("请输入要检索的位置:\n");
scanf("%d",&m);
GetElen(&L,m);
return 0;
}
编译实现如下图: