数组顺序表初始化、特定位置插入元素、删除特定值等操作

时间:2021-04-16 10:54:33
完善教材中数组顺序表初始化、特定位置插入元素、删除特定值等操作
#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;
}
实验结果如下:

数组顺序表初始化、特定位置插入元素、删除特定值等操作