亮不拉几 2022-03-23 13: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月30日
  • 已采纳回答 3月23日
  • 修改了问题 3月23日
  • 修改了问题 3月23日
  • 展开全部

悬赏问题

  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)
  • ¥15 传人记程序做的plc 485从机程序该如何写
  • ¥15 已知手指抓握过程中掌指关节、手指各关节和指尖每一帧的坐标,用贝塞尔曲线可以拟合手指抓握的运动轨迹吗?
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部