单链表上的排序运算2
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void Bubble(LinkList &L);
void ListTravel(LinkList &L);
void ListInsert_L(LinkList &L,int e);
int ListLength_L(LinkList L);
int main(){
int i,e;
LNode *s;
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next = NULL;
for(i=0;;i++){
printf("请输入要插入的数:");
scanf("%d",&e);
if(e==0)
break;
else
ListInsert_L(L,e);
}
ListTravel(L);
Bubble(L);
printf("输出排序后的链表:\n");
ListTravel(L);
return 0;
}
void ListTravel(LinkList &L){
LinkList p;
p=L->next;
while (p){
printf("%d ",p->data);
p=p->next;
}
if(L->next!=NULL)
printf("\n");
}
void ListInsert_L(LinkList &L,int e){
LNode *p;
p=new LNode;
p->data =e;
p->next = L->next;
L->next=p;
}
int ListLength_L(LinkList L){
LinkList p;
p=L->next;
int i=0;
while(p){
i++;
p=p->next;
}
return i;
}
void Bubble(LinkList &L){
LinkList p,q,pos,tail=NULL;
while(L->next->next!=tail){
pos=L;
p=L->next;
while(p->next!=tail){
q=p->next;
if(p->data>q->data){
pos->next=q;
p->next=q->next;
p->next=p;
p=pos->next;
}
p=p->next;
pos=pos->next;
}
tail=p;
}
}