链表插入排序 链表指针实现
#include<stdlib.h>
#include<stdio.h>
typedef struct node* link; //链接
struct node
{
int item;
link next;
};//节点
int main(void)
{
struct node heada, headb;
link t, u, x, a=&heada, b=&headb;
b->next=NULL;
int N=9;
t=a;
//头节点a指向t的首节点
for(short i=0; i<N; i++)
{
t->next = malloc(sizeof *t);
t=t->next;
t->item= rand()%1000;
}
t->next=NULL;
//初始化链表为0-999的随机数,结尾指向NULL
for(t=a->next; t!=NULL; t=u)
{
u=t->next;
//将t的下一个节点地址保存在u
//循环结束时将t指向t的下一个节点
for( x=b; x->next!=NULL; x=x->next)
if(x->next->item > t->item) break;
//判断b的下一个节点值是否大于当前a的节点
//如果成立立即跳出循环进行排序
//
t->next = x->next;
//将t的下一个节点指向 b的下一个节点
//a的首节点指向NULL
x->next=t; //将b的下一个节点指向当前t节点
}
// 排列这些节点使遍历链表按照顺序出现
b=b->next;
a=a->next;
//使a&b指向首节点而不是头节点
for(short i=0; i<N; i++)
{
printf("%d ", b->item);
b=b->next;
}
putchar('\n');
for(short i=0; i<N; i++)
{
printf("%d ", a->item);
a=a->next;
}
//分别打印a,b
return 0;
}
posted on 2018-02-14 17:57 MACHINE_001 阅读(122) 评论(0) 编辑 收藏 举报