第1个回答 2010-07-25
//链表的打印\排序
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}LNode,*LinkList;
void InitList (LinkList *L)
{
*L=(LNode*)malloc(sizeof(LNode));
(*L)->next=NULL;
}
void CreatFromTail(LinkList L)
{
int x;
LNode *r,*s;
r=L;
printf("please input number(>0),end with-1:\n");
while(1)
{
scanf("%d",&x);
if(x>0)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
}
else
{
r->next=NULL;
break;
}
}
}
void Output (LinkList L)
{
LNode *p;
p=L->next;
while(p!=NULL)
{
printf("%-5d",p->data);
p=p->next;
}
}
void Sort(LinkList L)
{
LNode *p,*q,*k;
LNode t;
p=L->next;
while (p->next)
{
k=p;
q=p->next;
while(q!=NULL)
{
if((k->data)>(q->data))
k=q;
else
q=q->next;
}
if(k!=p)
{
t=*p;
*p=*k;
*k=t;
t.next=p->next;
p->next=k->next;
k->next=t.next;
}
p=p->next;
}
}
void Destory(LinkList L)
{
LNode *p,*q;
p=L;
q=L->next;
while(q!=NULL)
{
free(p);
p=q;
q=q->next;
}
free(q);
}
int main(void)
{
LinkList L;
InitList (&L);
CreatFromTail (L);
Output (L);
printf("\n");
Sort(L);
printf("the sort numbers:");
Output (L);
printf("\n");
Destory(L);
return 0;
}
程序很简单,没有注释也应该能看懂。