#include
#include
#include
typedef struct node{
int data;
struct node *next;
}*BT;
void BLine(BT &T,int a[10],BT &T1);//建立链表
void Arrange(BT &T,BT &T1);//对链表排序
int main(){
int a[10]={4,1,0,3,8,9,6,2,7,5};
struct node *T,*T1;
BLine(T,a,T1);
Arrange(T,T1);
system("pause");
return 0;
}
/建立链表
void BLine(BT &T,int a[10],BT &T1){
int i=1;
struct node *head,*tail,*p,*p1;
p=(struct node *)malloc(sizeof(struct node));
p->next=NULL;
p->data=a[0];
T=head=tail=p;
while(i<10){
p=(struct node *)malloc(sizeof(struct node));
p->next=NULL;
p->data=a[i];
tail->next=p;
tail=p;
i++;
}
T1=tail;
p1=head;
while(1){
printf("%d ",p1->data);
if(p1->next==NULL) break;
p1=p1->next;
}
printf("\n");
}
///对链表排序
void Arrange(BT &T,BT &T1){
int n=1;
struct node *head,*tail,*p,*p1,*p2,*p3;
head=*(&T);
tail=*(&T1);
while(1){
p=head;
if(head->data>head->next->data){
head=head->next;
p->next=head->next;
head->next=p;
}
else p=p->next;
p1=head;
p2=tail;
while(1){
if(p->data>p->next->data){
if(p->next==p2){
p1->next=p->next;
p->next=NULL;
tail=p;
p1->next->next=p;
p1=p1->next;
break;
}
else{
p1->next=p->next;
p->next=p1->next->next;
p1->next->next=p;
p1=p1->next;
}
}
else{
p=p->next;
p1=p1->next;
}
if(p==p2)break;
}
n++;
if(n==10) break;
}
p3=head;
while(1){
printf("%d ",p3->data);
if(p3->next==NULL) break;
p3=p3->next;
}
}