#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;
}
你的链表是顺序链表,在main函数的for循环中,不需要在执行p=(SeqList*)malloc(sizeof(SeqList));了
代码修改如下:
#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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!