本實現主要採用交換指標的方法,其中附加有單鏈表及其相關的實現
#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);}
執行結果如下: