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

#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

你的链表是顺序链表,在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;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632