链表插入排序 链表指针实现

#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编辑  收藏  举报

导航