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

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

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

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

悬赏问题

  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器