【问题描述】实现不带头结点的双向循环链表的创建,然后实现该双向循环链表上数据的排序。(方法自定)
【输入形式】随机的数据
【输出形式】排序后的数据
【样例输入】5 7 2 8 1 3 4 9 6 0
【样例输出】1 2 3 4 5 6 7 8 9
【提示】0代表数据输入的结束
#include<iostream>
using namespace std;
#include<cstdlib>
typedef struct DNode
{
int data;
struct DNode*prior,*next;
}DNode,*DoubleList;
void Init(DoubleList*L)
{
*L=(DoubleList)malloc(sizeof(DNode));
(*L)->next=*L;
}
void CreateFromTail(DoubleList L)
{
int c;
DNode*r,*s;
r=L;
cin>>c;//不带头结点
L->data=c;
while(cin>>c&&c!=0)
{
s=(DNode*)malloc(sizeof(DNode));
s->data=c;
r->next=s;
s->prior=r;
r=s;
}
r->next=L;//最后一个结点指向头结点
}
void MySort(DoubleList L)
{
int t;
DNode*p,*q;
p=L;
q=p->next;
while(p->next!=L)
{
while(q!=L)
{
if(q->data<p->data)
{
t=q->data;
q->data=p->data;
p->data=t;
}
q=q->next;
}
p=p->next;
q=p->next;
}
}
void Print(DoubleList L)
{
DNode *p=L;
while(p->next!=L)
{
cout<<p->data<<' ';
p=p->next;
}
cout<<p->data;//p->next已为L,在循环中不会输出该结点的值,
//故在循环外输出避免遗漏
}
int main()
{
DoubleList L;
Init(&L);
CreateFromTail(L);
MySort(L);
Print(L);
return 0;
}