链表结构
typedef struct lnode
{
int data;
struct lnode * next;
}linklist;
核心代码
void insertsortcreatelist(linklist *&L,int b[],int n)//将数组中数据依次插入到链表中,在插入的过程中,保证链表升序
{
linklist *p,*q,*s,*t,*r;
r=(linklist *)malloc(sizeof(linklist));
r->data=b[0];
r->next=L->next;
L->next=r;
for(int i=1;i<n;i++)
{
if(b[i]>=r->data)//若新插入的数据大于等于尾结点数据,则直接在尾部插入新结点
{
q=r;
r=(linklist *)malloc(sizeof(linklist));
r->data=b[i];
r->next=q->next;
q->next=r;
}
else//若新插入的数据比尾结点数据小,则分类讨论
{
if(b[i] <= L->next->data)//若新插入的数据小于等于首元结点数据,则直接在头结点后插入新结点
{
p=(linklist *)malloc(sizeof(linklist));
p->data=b[i];
p->next=L->next;
L->next=p;
}
else//若新插入的数据比首元结点数据大,则往后查找,直到找到一个结点的数据比新插入的数据大,则在其前面插入数据
{
s=L->next;
while(s->next!=NULL&&b[i]>s->next->data)//当新插入的数据比s的下一个结点的数据大,则s向后移
s=s->next;
t=(linklist *)malloc(sizeof(linklist));
t->data=b[i];
t->next=s->next;
s->next=t;
}
}
}
}
运行结果如下图: