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 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?