奋斗改变一切!!
soft_wind 大哥
你那程序在VC++上也运行不了啊!
晕,上次改的是错的,不好意思.
看您的程序还不如我自己写一个,
下面这个是基本按您的思路去做的,
不过,我不喜欢这样,弄得我改了好久!
建成一个空表头就简单一些,如果改成双链表那就更简单一些.
#include <stdio.h>
typedef struct NODE
{
int num;
struct NODE *link;
}Node;
int flag=1,tag=0;
Node *sort(Node *head);
int main()
{
Node *head=NULL,*p=NULL,*q=NULL;
int data;
printf("Please input the number:");
scanf("%d",&data);
while(data)
{
if(flag)
{
head=(Node *)malloc(sizeof(Node));
head->num=data;
head->link=NULL;
flag=0;
q=head;
}
else
{
p=(Node *)malloc(sizeof(Node));
p->link=NULL;
p->num=data;
q->link=p;
q=p;
}
scanf("%d",&data);
}
q=head;
while(q)
{
printf("%4d",q->num);
q=q->link;
}
printf("\n\n");
getch();
head=sort(head);
while(head)
{
printf("%4d",head->num);
head=head->link;
}
printf("\n");
getch();
}
Node *sort(Node *head)
{
Node *p=NULL,*q=NULL,*pr=NULL,*prepr=NULL,*oncehead=head;
q=oncehead;
while(q->link)
{
for(p=q;p;p=p->link)
{
if(!flag)
{
pr=p;
flag=1;
}
else
if(pr->num>p->num)
pr=p;
}
flag=0;
if(pr==oncehead)
{
if(!tag)
head=q;
prepr=oncehead;
q=oncehead=oncehead->link;
tag=1;
}
else
{
Node *pt=oncehead;
while(pt->link!=pr)
pt=pt->link;
pt->link=pr->link;
if(!tag)
{
head=prepr=pr;
pr->link=oncehead;
tag=1;
}
else
{
prepr->link=pr;
pr->link=oncehead;
prepr=pr;
}
}
}
return head;
}
您再帮我看看有毛病没,遇到链表,我这脑子就不好使,呵呵