为什么代码没有输出呢


#include<stdio.h>
#include<stdlib.h>
#define MAX 10
#define OVERFLOW 0
typedef struct SqList
{
    int length;
    int *data;
    int max;
}SqList;
void Initial(SqList* L)
{
    L->data=(int *)malloc(sizeof(int)*(L->length));
    if(!L->data)
        exit(OVERFLOW);
    L->length=0;
    L->max=MAX;
}
int main()
{
    SqList L;
    int i;
    Initial(&L);
    printf("请输入你要创建顺序表的长度:\n");
    scanf("%d",&L.length);
    printf("请输入%d个你要放入的元素\n",L.length);
    for(i=0;i<L.length;i++)
    {
        scanf("%d ",&L.data[i]);
    }
    for(i=0;i<L.length;i++)
    {
        printf("%d ",L.data[i]);
        
    }
    free(L.data);
    L.data=NULL;
    return 0;
}

参考GPT和自己的思路:在代码中存在一个问题,即输入元素时的scanf中多了一个空格符,导致输入时会自动跳过一个元素,造成输出结果不完整。将scanf("%d ",&L.data[i]);修改为scanf("%d",&L.data[i]);即可解决问题。

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7632453
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:让代码块有颜色
  • 除此之外, 这篇博客: 排序算法之快速排序,它为什么这么快?中的 2 代码解析 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 49-62行就是刚刚的例子中做的操作,具体在代码注释中已经写明。

    66,67行,分别递归处理左边和右边,最终完成整体排序。

    这里还有一个问题:为什么每次都要从右边开始找,而不能从左边开始找呢?

    如果从左边开始找,那么在这个状态时,i往右一步就停止了。这时候,如果交换基准数和指针i的元素,10会被交换到左边,不符合快速排序“左边的数都比基准数小”的限制。之所以要让指针j先动,就是因为,最后必须停在比基准数小的元素,只有右边先动才可以保证。

  • 您还可以看一下 周声华老师的线性代数 精讲课程中的 矩阵的秩小节, 巩固相关知识点