【问题描述】用单链表存储数据,实现对结点整体的从小到大的排序。
【注意】可采用翻转课堂上讲解的插入、冒泡排序中的一种,或者采用选择排序。每组成员一共需要实现其中的两种排序:插入和选择排序、或者冒泡和选择排序。
【输入形式】待排序的数据,以0作为结束。
【输出形式】排序后的数据
【样例输入】2 4 3 1 5 0
【样例输出】1 2 3 4 5
#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct Node
{
Elemtype data;
struct Node* next;
}Node,*Linklist;
void init(Linklist *L)
{
*L=(Linklist)malloc(sizeof(Node));
(*L)->next=NULL;
}
void createFromTail(Linklist L)
{
Node*s,*p;
Elemtype flag=1;
Elemtype c;
p=L;
while(flag)
{
scanf("%d",&c);
if(c!=0)
{
s=(Linklist)malloc(sizeof(Node));
s->data=c;
p->next=s;
p=s;
}
else
{
flag=0;
p->next=NULL;
}
}
}
void LinklistSort(Linklist L)
{
Node* pre,*p,*r;
p=L->next;
r=p->next;
p->next=NULL;
p=r;
while(p)
{
pre=L;
r=p->next;
while(pre->next!=NULL&&pre->next->data<p->data)
{
pre=pre->next;
}
p->next=pre->next;
pre->next=p;
p=r;
}
}
void show(Linklist L)
{
Node* p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
Linklist L;
init(&L);
createFromTail(L);
LinklistSort(L);
show(L);
return 0;
}