本实现主要采用交换指针的方法,其中附加有单链表及其相关的实现
#include <stdio.h>
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
typedef int ElementType;
struct Node
{
ElementType Element;
Position Next;
};
List initList()
{
List L = (List)malloc(sizeof(struct Node));
L->Next = NULL;
return L;
}
void insertElement(List L)
{
int element;
while(scanf("%d", &element))
{
Position tmp = (Position)malloc(sizeof(struct Node));
tmp->Element = element;
tmp->Next = L->Next;
L->Next = tmp;
}
}
void printList(List L)
{
Position P = L->Next;
printf("L->");
while(P != NULL)
{
printf("%d - >", P->Element);
P = P->Next;
}
printf("NULL\n");
}
int get_length(List L)
{
int i = 0;
Position P = L->Next;
while(P != NULL)
{
i++;
P = P->Next;
}
return i;
}
void BubblePoint(List L)
{
Position pre;
Position cur;
Position next;
int i, j;
i = get_length(L);
printf("length = %d\n", i);
while(i != 1)
{
pre = L;
cur = L->Next;
next = cur->Next;
j = i;
i--;
while(j != 1)
{
j--;
if(cur->Element > next->Element)
{
cur->Next = next->Next;
pre->Next = next;
next->Next = cur;
pre = next;
next = cur->Next;
}
else
{
pre = cur;
cur = next;
next = next->Next;
}
}
}
}
int main(int argc, char **argv)
{
List L;
L = initList(L);
insertElement(L);
printList(L);
BubblePoint(L);
printList(L);
}
执行结果如下: