单链表的排序运算1
#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 &head){
LNode * p, * q, * tail;
tail = NULL;
while((head->next->next) != tail)
{
p = head;
q = head->next;
while(q->next != tail)
{
if((q->data) > (q->next->data))
{
p->next = q->next;
q->next = q->next->next;
p->next->next = q;
q = p->next;
}
q = q->next;
p = p->next;
}
tail = q;
}
}