线性表按顺序存储方式存储元素,最后输出并显示在屏幕上

编译没有报错,运行后结果不对,我想要的结果是输出:Xiaoyidong 和Xiaoyi&Dong和Xiaoyi&ong,求同志们帮我看看问题在哪
要求如下:

img


代码如下:

img

img

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 6
#define LISTINCREMENT 5
#define ERROR 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef char ElemType;
typedef struct{
ElemType *p;
ElemType *q;
ElemType *elem;
ElemType *newbase;
int length;
int Listsize;}SqList;

Status InitList(SqList &L){
L.elem=(ElemType )malloc(MAXSIZEsizeof(ElemType));
if(!L.elem){exit(OVERFLOW);}
L.length = 0;
L.Listsize = MAXSIZE;
return OK;}

Status ListDelete(SqList&L,int i,ElemType&e){ ElemType *p;
ElemType *q;
if((i<1)||(i>L.length))
return ERROR;
p=&(L.elem[i-1]);
e=p;
q=L.elem+L.length-1;
for(++p;p<=q;++p)
(p-1);
--L.length;
return OK;}

Status ListInsert(SqList&L,int i,ElemType e){ ElemType *p;
ElemType *q;
ElemType *elem;
ElemType newbase;
if(i<1||i>L.length+1)return ERROR;
if(L.length>=L.Listsize){
newbase=(ElemType
)realloc(L.elem,(L.Listsize+LISTINCREMENT)sizeof(ElemType));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.Listsize+=LISTINCREMENT;}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);
p>=q;
--p)
(p+1)=*p;
*q=e;
++L.length;
return OK;}

Status Output(SqList&L){
int i;
for(i=0;i<L.length;i++)
printf("c%",L.elem[i]);
printf("\n");
return 0; }

int main(){
SqList L;
InitList(L);
int i=0;
char e;char name[10]={'X','i','a','o','y','i','D','o','n','g'};
for(i=0;i<10;i++)
Output(L);
ListInsert(L,7,'&');
Output(L);
ListDelete(L,8,e);
Output(L);
return 0;}


img


#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 15
#define LISTINCREMENT 5
#define ERROR 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef char ElemType;
typedef struct
{
    ElemType *p;
    ElemType *q;
    ElemType elem[MAXSIZE];
    ElemType *newbase;
    int length;
    int Listsize;
} SqList;

SqList InitList(SqList L)
{
    L.length = 0;
    L.Listsize = MAXSIZE;
    return L;
}

SqList ListDelete(SqList L,int i)
{
    if((i<1)||(i>L.length))
        exit(ERROR);
    for(int j=i-1; j<L.length-1; j++)
        L.elem[j]=L.elem[j+1];
    L.length--;
    return L;
}

SqList ListInsert(SqList L,int i,ElemType e)
{
    if(i<1||i>L.length+1)
        exit(ERROR);
    for(int j=L.length; j>=i; j--)
    {
        L.elem[j]=L.elem[j-1];
    }
    L.elem[i-1]=e;
    L.length++;
    return L;
}

Status Output(SqList L)
{
    int i;
    for(i=0; i<L.length; i++)
        printf("%c",L.elem[i]);
    printf("\n");
    return 0;
}

int main()
{
    SqList L;
    L=InitList(L);
    int i=0;
    char e;
    char name[10]= {'X','i','a','o','y','i','D','o','n','g'};
    for(i=0; i<10; i++)
    {
        L.elem[i]=name[i];
        L.length++;
    }
    L=ListInsert(L,7,'&');
    Output(L);
    L=ListDelete(L,8);
    Output(L);
    return 0;
}