PINKYG 2022-03-19 22:31 采纳率: 66.7%
浏览 30
已结题

C 顺序表逆置问题 在输出时返回0并闪退

在完成顺序表逆置问题的代码时,为什么在输入数据以后会返回0退出运行呢?

#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1

typedef int Status;     //用Status表示int类型
typedef int ElemType;    //定义ElemType为int类型

typedef struct seqList
{
    int n;
    int maxLength;
    ElemType *element;
}SeqList;

Status Init(SeqList *L, int mSize)
{
    L->maxLength= mSize;
    L->n=0;
    L->element=(ElemType *)malloc(sizeof(ElemType)*mSize);
    if (!L->element)
        return ERROR;
    return OK;
}

Status CreateList(SeqList *L)
{
    int len;
    int i;
    printf("请输入想要创建表的长度:");
        scanf("%d",&len);
    if(len<0||len>L->maxLength)
        return ERROR;
    L->maxLength = len;
    printf("请输入%d个数据:",len);
    for(i=0;i<len;i++)
    {
        scanf("%d",&L->element[i]);
    }
    return OK;
}

Status Output(SeqList *L)
{
    int i;
    for(i=0;i<=L->maxLength;i++)
    printf("%d",L->element[i]);
}

Status ReverseList(SeqList *L)
{
    int i;
    ElemType temp;
    if(!L->element)
        return ERROR;
    for(i=0;i<L->maxLength/2;i++)
    {
        temp = L->element[i];
        L->element[i] = L->element[L->maxLength-i-1];
        L->element[L->maxLength-i-1] = temp;
    }
    return OK;
}

void main()
{
    SeqList list;
    Init(&list,10);
    CreateList(&list);
    printf("初始线性表为:");
    Output(&list);
    ReverseList(&list);
    printf("逆置后的线性表为:");
    Output(&list);
}

只能运行到如下步骤,再敲击回车键就会闪退

img

并返回0

img

想不明白到底是哪里出现了问题
有人可以解答嘛,怎样可以实现逆置并输出
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-03-19 23:26
    关注

    把顺序表的最大长度和创建的长度混淆了,修改处见注释,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    #define ERROR 0
    #define OK 1
     
    typedef int Status;     //用Status表示int类型
    typedef int ElemType;    //定义ElemType为int类型
     
    typedef struct seqList
    {
        int n;
        int maxLength;
        ElemType *element;
    }SeqList;
     
    Status Init(SeqList *L, int mSize)
    {
        L->maxLength= mSize;
        L->n=0;
        L->element=(ElemType *)malloc(sizeof(ElemType)*mSize);
        if (!L->element)
            return ERROR;
        return OK;
    }
     
    Status CreateList(SeqList *L)
    {
        int len;
        int i;
        printf("请输入想要创建表的长度:");
            scanf("%d",&len);
        if(len<0||len>L->maxLength)
            return ERROR;
        L->n = len;    //L->maxLength = len;
        printf("请输入%d个数据:",len);
        for(i=0;i<len;i++)
        {
            scanf("%d",&L->element[i]);
        }
        return OK;
    }
     
    Status Output(SeqList *L)
    {
        int i;
        for(i=0;i<L->n;i++) //for(i=0;i<=L->maxLength;i++)
        printf("%d",L->element[i]);
    }
     
    Status ReverseList(SeqList *L)
    {
        int i;
        ElemType temp;
        if(!L->element)
            return ERROR;
        for(i=0;i<L->n/2;i++) //for(i=0;i<L->maxLength/2;i++)
        {
            temp = L->element[i];
            L->element[i] = L->element[L->n-i-1]; //L->element[L->maxLength-i-1];
            L->element[L->n-i-1] = temp;  //L->element[L->maxLength-i-1]
        }
        return OK;
    }
     
    void main()
    {
        SeqList list;
        Init(&list,10);
        CreateList(&list);
        printf("初始线性表为:");
        Output(&list);
        ReverseList(&list);
        printf("逆置后的线性表为:");
        Output(&list);
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月20日
  • 修改了问题 3月19日
  • 创建了问题 3月19日

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line