亮不拉几 2022-03-23 21:41 采纳率: 100%
浏览 67
已结题

这段代码为什么输不出结果

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1000

typedef struct
{
int elem[MAXSIZE];
int last;
} SeqList;

void printF(SeqList*L,int n)//输出函数
{
for(int i=0;i<=n;i++)
{
printf("%d",L->elem[i]);
}
}

void InsList(SeqList*L,int e)
{
for(int i=0;i<=L->last;i++)
{
if(L->elem[i]<e&&L->elem[i+1]>e)//寻找e的存放位置
{
for(int k=L->last;k>=i-1;k--)
L->elem[k+1]=L->elem[k];
}
L->elem[i-1]=e;//插入e
L->last++;
}
creat(L,L->last);
}

int main()
{
int x,t;
SeqList p;
p=(SeqList
)malloc(sizeof(SeqList));//为p分配动态内存
int n;
scanf("%d",&n);//输入p中元素个数
for(int i=0;i<=n;i++)
{
p=(SeqList*)malloc(sizeof(SeqList));//为p分配动态内存
scanf("%d",&p->elem[i]);
p->last++;//输入p中的元素
}
for(int i=0;i<=p->last;i++)
{
if(p->elem[i]>p->elem[i+1])
{
t=p->elem[i];
p->elem[i]=p->elem[i+1];
p->elem[i+1]=t;
}
}
scanf("%d",&x);//输入要插入的元素x
InsList(p,x);
return 0;
}

img

  • 写回答

2条回答 默认 最新

  • 关注

    你的链表是顺序链表,在main函数的for循环中,不需要在执行p=(SeqList*)malloc(sizeof(SeqList));了

    img

    代码修改如下:

    #include <stdio.h>
    #include <stdlib.h>
    #define MAXSIZE 1000
    
    typedef struct
    {
        int elem[MAXSIZE];
        int last;
    } SeqList;
    
    void creat(SeqList*L,int n)//输出函数
    {
        for(int i=0;i<n;i++) //修改1  这里是<,不是<=
        {
            printf("%d ",L->elem[i]); 
        }
    }
    
    void InsList(SeqList*L,int e)
    {
    
        //判断是否比最后一个还大
        if(e >L->elem[L->last-1])
        {
            L->elem[L->last] = e;
            L->last++;
        }else
        {
            for(int i=0;i<L->last-1;i++) //修改2  这里是i<L->last-1,否则越界了
            {
                if(L->elem[i]<e&&L->elem[i+1]>e)//寻找e的存放位置
                {
                    for(int k=L->last;k>i+1;k--) //修改
                        L->elem[k]=L->elem[k-1];
    
                    L->elem[i+1]=e;//插入e
                    L->last++;
                }
    
    
            }
        }
        
        
        creat(L,L->last);
    }
    
    int main()
    {
        int x,t;
        SeqList *p;
        p=(SeqList*)malloc(sizeof(SeqList));//为p分配动态内存
        p->last = 0; //修改,初始化
        int n;
        scanf("%d",&n);//输入p中元素个数
        for(int i=0;i<n;i++)
        {
            //p=(SeqList*)malloc(sizeof(SeqList));//为p分配动态内存 修改,这一句不需要
            scanf("%d",&p->elem[i]);
            p->last++;//输入p中的元素
        }
        //修改,排序需要用双层for循环
        for(int i=0;i<p->last-1;i++)
        {
            for(int j=0;j<p->last-1-i;j++)
            {
    
                if(p->elem[j]>p->elem[j+1])
                {
                    t=p->elem[j];
                    p->elem[j]=p->elem[j+1];
                    p->elem[j+1]=t;
                }
            }
            
        }
        scanf("%d",&x);//输入要插入的元素x
        InsList(p,x);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月31日
  • 已采纳回答 3月23日
  • 修改了问题 3月23日
  • 修改了问题 3月23日
  • 展开全部

悬赏问题

  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗