枫溪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日

悬赏问题

  • ¥15 关于#c语言#的问题:构成555单稳态触发器,采用LED指示灯延时时间,对延时时间进行测量并显示(如楼道声控延时灯)需要Proteus仿真图和C语言代码
  • ¥50 神舟笔记本,没有linux的驱动,装的Ubuntu系统,想把风扇速度调到最大
  • ¥15 workstation加载centos进入emergency模式,查看日志报警如图,怎样解决呢?
  • ¥50 如何用单纯形法寻优不能精准找不到给定的参数,并联机构误差识别,给定误差有7个?matlab
  • ¥15 workstation加载centos进入emergency模式,查看日志报警如图,没有XFS,怎样解决呢?
  • ¥15 应用商店如何检测在架应用内容是否违规?
  • ¥15 Ubuntu系统配置PX4
  • ¥50 nw.js调用activex
  • ¥15 数据库获取信息反馈出错,直接查询了ref字段并且还使用了User文档的_id而不是自己的
  • ¥15 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问