#include
#include
using namespace std;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //结点的指针域
} LNode, *LinkList; //LinkList为指向结构体LNode的指针类型
void CreateList_R(LinkList &L, int n) //算法2.12 后插法创建单链表
{
L=new LNode;
L->next=NULL;
LNode*r=L;
for(int i=1;i<=n;i++){
LinkList p=new LNode;
cin>>p->data;
p->next=NULL;r->next=p;
r=p;
}
}
void ListSort(LinkList &L)
{
LNode* p=L->next,* q=L,* r;
int i=0,j,k,n,f=0;
while(p){
p=p->next;
i++;
}
p=L->next;
for(j=1;j<=i;j++){
f=0;
while(p){
if(p->data>p->next->data){
r=p->next->next;
q->next=p->next;
p->next->next=p;
p->next=r;
q=p;p=p->next;
f=1;
}
else{
q=p;
p=p->next;
}
}
if(!f){
break;
}
q=L;
p=L->next;
}
}
void ListPrint(LinkList L)
{
LNode *p;
for(p = L->next; p; p = p->next)
cout << p->data << (p->next ? ' ' : '\n');
}
int main()
{
LinkList L;
int n;
cin >> n;
CreateList_R(L, n);
ListSort(L);
ListPrint(L);
}
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633