链表排序
/******************************
* 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");
}
评论
发表评论