数据结构 顺序表的基本操作

img

#include "stdio.h"
#include "stdlib.h"

#define MAXSIZE 100
typedef int datatype;
typedef struct{
datatype a[MAXSIZE];
int size;
}sequence_list;

void initseqlist(sequence_list *L)
{ L->size=0;
}

void input(sequence_list *L)
{ datatype x;
initseqlist(L);
printf("请输入一组数据,以0做为结束符:\n");
scanf("%d",&x);
while (x)
{ L->a[L->size++]=x;
scanf("%d",&x);
}
}

void print(sequence_list L)
{ int i;
for (i=0;i<L.size;i++)
{ printf("%5d",L.a[i]);
if ((i+1)%10==0) printf("\n");
}
printf("\n");
}

void insertx(sequence_list *L,datatype x)
{
int j;
if(L->size<x){
j=L->size-1;
while(j>=0&&L->a[j]>x){
L->a[j+1]=L->a[j];
j--;
}
L->a[j+1]=x;
L->size++;
}
}

int main()
{
sequence_list L;
datatype x;
input(&L);
print(L);
printf("请输入待插入的元素:");
scanf("%d",&x);
insertx(&L,x);
printf("插入元素%d之后的顺序表为:",x);
print(L);
}
希望的结果是:原顺序表为:
11 22 3 45 55
第一个位置插入95之后的顺序表为:
95 11 22 3 45 55
删除3之后的顺序表为:
95 11 22 45 55
在45后面插入54之后的顺序表为:
95 11 22 45 54 55
朋友们,怎么写才能达到我想要的结果啊

供参考:

#include "stdio.h"
#include "stdlib.h"
#define MAXSIZE 100
typedef int datatype;
typedef struct{
    datatype a[MAXSIZE];
    int size;
}sequence_list;

void initseqlist(sequence_list *L)
{
    L->size=0;
}

void input(sequence_list *L)
{
    datatype x;
    initseqlist(L);
    printf("请输入一组数据,以0做为结束符:\n");
    scanf("%d",&x);
    while (x)
    {
        L->a[L->size++]=x;
        scanf("%d",&x);
    }
}

void print(sequence_list L)
{
    int i;
    for (i=0;i<L.size;i++)
    {
        printf("%5d",L.a[i]);
        if ((i+1)%10==0)
            printf("\n");
    }
    printf("\n");
}

void insertx(sequence_list *L,int i,datatype x) //修改
{
    int j;
    if (i < 1 || i > L->size + 1) return;
    for (j = L->size; j > i - 1; j--){
            L->a[j] = L->a[j - 1];
    }
    L->a[j]=x;
    L->size++;
}

void deletex(sequence_list *L,datatype x) //修改
{
    int i,j;
    for (i = 0;i < L->size; i++){
         if (L->a[i] == x){
             for (j = i;j < L->size - 1; j++){
                  L->a[j] = L->a[j + 1];
             }
             L->size--;
             return;
         }
    }
    if (i == L->size)
        printf("顺序表中存放数据中值为%d的结点不存在!\n",x);
}

void insert_xy(sequence_list *L,datatype x,datatype y) //修改
{
    int i,j;
    for (i = 0;i < L->size; i++){
         if (L->a[i] == x){
             for (j = L->size; j > i + 1; j--){
                 L->a[j] = L->a[j - 1];
             }
             L->a[j] = y;
             L->size++;
             return;
         }
    }
    if (i == L->size)
        printf("顺序表中存放数据中值为%d的结点不存在!\n",x);
}

int main()
{
    sequence_list L;
    datatype x,i;
    input(&L);
    print(L);

    printf("请输入待插入的位置,及待插入元素值(i,x):");
    scanf("%d%d",&i,&x);
    insertx(&L,i,x);
    printf("第%d个位置插入元素%d之后的顺序表为:\n",i,x);
    print(L);

    printf("请输入待删除元素数据值:");
    scanf("%d",&x);
    deletex(&L,x);
    printf("删除%d之后的顺序表为:\n",x);
    print(L);

    printf("在当前存放数据的值45后插入一个值为54的整形数据:\n");
    insert_xy(&L,45,54);
    print(L);

    return 0;
}