完善教材中数组顺序表初始化、特定位置插入元素、删除特定值等操作
#include <iostream>
using namespace std;
//顺序表删除所有值为x的元素
#define Maxsize 100
typedef int ElemType;
//定义结构体数组
typedef struct
{
ElemType elem[Maxsize];
int last;
}SeqList;
//初始化数组
void initList(SeqList *L)
{
ElemType e;
L->last=0;
printf("请输入元素:\n");
scanf("%d",&e);
while(e!=0)
{
if((L->last)>Maxsize)
printf("表已满,无法继续输入");
L->elem[L->last]=e;
(L->last)++;
scanf("%d",&e);
}
L->last--;
}
//在数组的第i个位置插入元素e
int InsList(SeqList *L,int i,ElemType e)
{
int k;
if(i<1||i>L->last)
{
printf("插入位置i不合法");
return 0;
}
if((L->last)>Maxsize)
{
printf("表已满");
return 0;
}
for(k=L->last;k>=i;k--)
{
L->elem[k+1]=L->elem[k];
}
L->elem[k+1]=e;
L->last++;
return 0;
}
//删除数组值为x的元素
void delx(SeqList *L,int x)
{
int i=0,j=0;
while(i<=(L->last))
{
if((L->elem[i])!=x)
{
L->elem[j]=L->elem[i];
i++;
j++;
}
else i++;
}
L->last=j-1;
}
//打印数组
void show(SeqList *L)
{
int i=0;
for(i=0;i<=L->last;i++)
{
printf("%d ",L->elem[i]);
}
printf("\n");
}
int main()
{
int i;
ElemType e1,e2;
SeqList L;
initList(&L);
printf("%d\n",L.last);
printf("请输入要插入的数和插入的位置:");
scanf("%d %d",&e1,&i);
InsList(&L,i,e1);
printf("插入后的数组为:\n");
show(&L);
printf("请输入要删除的数:");
scanf("%d",&e2);
delx(&L,e2);
printf("删除后的数组为:\n");
show(&L);
return 0;
}
实验结果如下:
