链表排序

来源:互联网 发布:阳光一百置业 知乎 编辑:程序博客网 时间:2024/05/20 06:51

常用链表有两种,单链表和双向链表。
单链表:在链表基础的结构体中有一个指针,指向下一个或者上一个。
双链表:跟单链表差不多,不过有两个指针,分别指向前和后。

最近在学习链表的排序,下面使用单链表配合冒泡法完成排序。
(使用的双链表,但仅用单链表的功能)

链表基础结构体

typedef struct data{    int a;    struct data *next;    struct data *last;}Data;

链表的创建

Data * creat(int n){    Data *head,*p1,*p2;    head = p1 = p2 = (Data *)malloc(sizeof(Data));    if(head == NULL) return NULL;    scanf("%d",&head -> a);    n--;    while(n--)    {        p1 = (Data *)malloc(sizeof(Data));        scanf("%d",&p1 -> a);        p1 -> last = p2;        p2 -> next = p1;        p2 = p1;    }    p2 -> next = NULL;    head -> last = NULL;    return head;}  //容错处理欠佳

冒泡排序

void bubble_sort(Data *head){    Data *p = head,*q = head;    while(q -> next)    {        p = head; //每次排序后需要再次初始至head        while(p -> next)        {            if(p -> a < p -> next -> a)            {                int tmp;                tmp = p -> a;                p -> a = p -> next -> a;                p -> next -> a = tmp;            }            p = p -> next;        }        q = q -> next;    }}

冒泡排序的时间复杂度太大,在日常使用中一般也不会用,谨以此代码做思路。改天贴出快速排序下的链表排序。

0 0
原创粉丝点击