数据结构关于输出删除后的顺序表元素出现的问题

问题遇到的现象和发生背景

要实现删除顺序表的一个元素之后输出删除后的顺序表元素
输出之后不知道为什么会出现两个15

问题相关代码,请勿粘贴截图 #include<stdio.h>

#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OVERFLOW 0
#define OK 1
#define ERROR -1
typedef struct{
int elem;
int length;
int listsize;
}SqList;//定义一个顺序表
int InitList_Sq(SqList &L){
L.elem=(int
)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)
exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}//顺序表的初始化
int ListDelete_Sq(SqList &L,int i,int &e){
if((i<1)||(i>L.length))
return ERROR;
e=L.elem[i-1];
int j;
for(j=i;j<L.length-1;j++)
L.elem[j-1]=L.elem[j];
--L.length;
return OK;
} //顺序表的删除
int CreateList_Sq(SqList &L){
int i;
for(i=0;i<7;i++){
scanf("%d",&L.elem[i]);
L.length=L.length+1;
}
return OK;
}//输入顺序表
int PrintList_Sq(SqList &L){
int i;
for(i=0;i<7;i++){
printf("%d ",L.elem[i]);
}
return OK;
}//打印顺序表
int main(){
SqList LB;
int i,e;
InitList_Sq(LB);
printf("线性表LB元素如下:\n");
CreateList_Sq(LB);
printf("请输入删除的元素位置i=");
scanf("%d",&i);
printf("被删除的元素e=");
scanf("%d",&e);
printf("新线性表LB元素如下:\n");
ListDelete_Sq(LB,i,e);
PrintList_Sq(LB);
return 0;
}

运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果让两个15变成一个15

修改处见注释,供参考:

#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OVERFLOW 0
#define OK 1
#define ERROR -1
typedef struct{
    int *elem;
    int length;
    int listsize;
}SqList;//定义一个顺序表
int InitList_Sq(SqList &L){
    L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
    if(!L.elem)
       exit(OVERFLOW);
    L.length=0;
    L.listsize=LIST_INIT_SIZE;
    return OK;
}//顺序表的初始化
int ListDelete_Sq(SqList &L,int i,int &e){
    if((i<1)||(i>L.length)){
       e = -1;          //修改
       return ERROR;
    }
    e=L.elem[i-1];
    int j;
    for(j=i;j<L.length;j++) //for(j=i;j<L.length-1;j++)
        L.elem[j-1]=L.elem[j];
    --L.length;
    return OK;
} //顺序表的删除
int CreateList_Sq(SqList &L){
    int i;
    for(i=0;i<7;i++){
        scanf("%d",&L.elem[i]);
        L.length=L.length+1;
    }
    return OK;
}//输入顺序表
int PrintList_Sq(SqList &L){
    int i;
    for(i=0;i<L.length;i++){  //for(i=0;i<7;i++){
        printf("%d ",L.elem[i]);
    }
    return OK;
}//打印顺序表
int main(){
    SqList LB;
    int i,e;
    InitList_Sq(LB);
    printf("线性表LB元素如下:\n");
    CreateList_Sq(LB);
    printf("请输入删除的元素位置i=");
    scanf("%d",&i);
    ListDelete_Sq(LB,i,e);           //修改
    printf("被删除的元素e=%d\n",e);  //修改
                           //scanf("%d",&e);
    printf("新线性表LB元素如下:\n");
    PrintList_Sq(LB);

    return 0;
}

参考下这个。。删除后,后面的元素要前移1位。