枫溪02 2022-03-22 10:55 采纳率: 84.6%
浏览 38
已结题

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

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

要实现删除顺序表的一个元素之后输出删除后的顺序表元素
输出之后不知道为什么会出现两个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
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-03-22 12:10
    关注

    修改处见注释,供参考:

    #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条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月22日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改