c语言链表合并并排序,C语言链表的创建,排序和合并

先创建两个乱序的链表,再依次排序。然后将两个有序链表合并。

自己闲来练手的程序,不足之处望指出。

#include

#include

typedef struct node

{

int num;

struct node *next;

}link;

void create(link *head)

{

link *p,*q;

p=head;

int i;

for(i=0;i<5;i++)

{

q=(link *)malloc(sizeof(link));

p->next=q;

p=q;

}

p=head->next;

while(p!=NULL)

{

scanf("%d",&(p->num));

p=p->next;

}

}

void sort(link *head)

{

link *p,*q,*r,*u;

p=head->next;

head->next=NULL;

while(p)

{

r=head;

q=head->next;

while(q&&q->num<=p->num)

{

r=q;

q=q->next;

}

u=p->next;

p->next=r->next;

r->next=p;

p=u;

}

}

link *merge(link *a,link*b)

{

link *p, *q,*pc;

p=a->next;

q=b->next;

link *c=(link*)malloc(sizeof(link));

pc=c;

while(p&&q)

{

if(p->num<=q->num)

{

pc->next=p;

pc=pc->next;

p=p->next;

}

else

{

pc->next=q;

pc=pc->next;

q=q->next;

}

}

pc->next=p?p:q;

free(b);

return c;

}

void main()

{

link * a,*b,*c;

link *pa,*pb,*pc;

a=(link*)malloc(sizeof(link));

b=(link*)malloc(sizeof(link));

printf("create a\n");

create(a);

sort(a);

pa=a->next;

printf("sort a is;\n");

while(pa)

{

printf("%d ",pa->num);

pa=pa->next;

}

printf("\n");

printf("create b\n");

create(b);

sort(b);

pb=b->next;

printf("sort b is;\n");

while(pb)

{

printf("%d ",pb->num);

pb=pb->next;

}

printf("\n");

c=merge(a,b);

pc=c->next;

printf("merge is:");

while(pc)

{

printf("%d ",pc->num);

pc=pc->next;

}

printf("\n");

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值