题目要求:
我的代码实现:
#include<stdio.h>
#include<stdlib.h>
#define ElemType int
typedef struct LNode{
ElemType data;
struct LNode* next;
}LNode,*LinkList;
//尾插法(有头结点)
LinkList List_HeadInsert(LinkList &L)
{
ElemType x;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
LNode *r=L,*s;
scanf("%d",&x);
while(x!=9999)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=NULL;
r->next=s;
r=s;
scanf("%d",&x);
}
return L;
}
//本题的解答:
LinkList BiggerSort(LinkList &L)
{
LNode* pre=L,*k=L,*minpre=L,*q;
while(pre->next->next)
{
while(pre->next)
{
if(pre->next->data<minpre->next->data)minpre=pre;
pre=pre->next;
}
q=minpre->next;
minpre->next=q->next;
q->next=k->next;
k->next=q;
k=q;
pre=k;
minpre=k;
}
return L;
}
//................................
//打印链表内所有元素
void ShowList(LinkList L)
{
LNode *p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
return;
}
//彻底销毁整个链表
void DestroyList(LinkList &L)
{
LNode *p=L->next,*q;
while(p)
{
q=p;
p=p->next;
free(q);
}
free(L);
return;
}
int main()
{
LinkList L;
printf("构造带头结点的单链表L:\n");
L=List_HeadInsert(L);
L=BiggerSort(L);
printf("\n输出处理之后的链表:\n");
ShowList(L);
DestroyList(L);
return 0;
}