单链表实现冒泡排序算法(C实现)

来源:互联网 发布:excel表格不能合计数据 编辑:程序博客网 时间:2024/04/26 07:20

本实现主要采用交换指针的方法,其中附加有单链表及其相关的实现

#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);}

执行结果如下:


原创粉丝点击