链表排序

/******************************
* 2008-4-17
* 功能:输入一个链表大小为10,
*        按从小到大的顺序排序
* 作者:李海峰
*******************************/
#include <stdio.h>
#include <malloc.h>
#define SIZE 10
typedef struct node
{
int value;//存储数值
struct node * next;//存储下一个节点的地址
}node,*Link;
/*
typedef struct
{
node * head;//链表的头节点
int size;
}*List;
*/
//先建立链表
node * CreateList()
{
int n=1;
node * h=(node *)malloc(sizeof(node));
node * newnode=(node *)malloc(sizeof(node));
printf("请输入第1个数字");
scanf("%d",&newnode->value);
h->next=newnode;
newnode->next=NULL;
for(n++;n<=10;n++)
{//倒着排出数字
   printf("请输入第%d个数字",n);
   node *thenode=(node *)malloc(sizeof(node));
   scanf("%d",&thenode->value);
   thenode->next=h->next;
   h->next=thenode;
}
node *p=NULL;//临时指针
p=h->next;//呵呵,长时间不碰程序,真是错误百出呀。
printf("输入的数字是\n");
while(p!=NULL)
{
   printf("->%d",p->value);
   p=p->next;
}
printf("\n");
return h;


}
//-----------del-------------------------------------------------------------------------------


/*
node * SearchMinPos(node *p1,Link L)
{
node * ptemp_1=p1;//ptemp_1 、p1指向从哪里开始查找的位置
node * ptempNode=ptemp_1;
int tempvalue=ptemp_1->value;
while(ptemp_1)
{
   ptemp_1=ptemp_1->next;
   if(tempvalue<ptemp_1->value)
   {
    tempvalue=ptemp_1->value;
    ptempNode=ptemp_1;//ptempList指向这个较小的数值的位置
   }


}


return ptempNode;//将找到的这个节点的位置返回
}


*/


//---------------------------
void main()
{
node * List=CreateList();
//p1指向将要插入节点的位置
//例如:如果第一个位置则p1在那里等待
node * h=NULL, * p=NULL,*q=NULL;
for(int j=0;j<10;j++)//循环10次
{
   h=List;
   for(int i=10;i>j&&h->next->next!=NULL;i--)
   {
    p=h->next;
    q=p->next;
    if(p->value>p->next->value)
    {
     q=p->next;
     p->next=p->next->next;//把q节点分离出来
     q->next=p;
     h->next=q;
    }
    h=h->next;   
   }
  
}
h=List->next;
while(h)
{
   printf("->%d",h->value);
   h=h->next;
}
printf("\n");


}

评论

此博客中的热门博文

Linux/ARM Page Table Entry 属性设置分析

由RFE指令引发的一串故事

提交了30次才AC ---【附】POJ 2488解题报告