c语言实现基本的数据结构(二) 链表(包括链表的三种简单排序算法)

#include "stdafx.h"
#include <stdlib.h>
//创建一个节点,data为value,指向NULL
Node* Create(int value){
    Node* head = (Node*)malloc(sizeof(Node));
    head->data = value;
    head->next = NULL;
    return head;
}
//销毁链表
bool Destroy_List(Node* head){
    Node* temp;
    while (head){
        temp = head->next;
        free(head);
        head = temp;
    }
    head = NULL;
    return true;
}
//表后添加一个节点,Create(value)
bool Append(Node* head,int value){
    Node* n = Create(value);
    Node* temp = head;
    while (temp->next){
        temp = temp->next;
    }
    temp->next = n;
    return 0;
}
//打印链表
void Print_List(Node* head){
    Node* temp = head->next;
    while (temp){
        printf("%d->", temp->data);
        temp = temp->next;
    }
    printf("
");
}
//在链表的第locate个节点后(头节点为0)插入创建的节点Create(value)
bool Insert_List(Node* head, int locate, int value){
    Node* temp = head;
    Node* p;
    Node* n = Create(value);
    if (locate < 0)
        return false;
    while (locate--){
        if (temp->next == NULL){
            temp->next = Create(value);
            return true;
        }
        temp = temp->next;
    }
    p = temp->next;
    temp->next = n;
    n->next = p;
    return true;
}
//删除第locate个节点后(头节点为0)的节点
bool Delete_List(Node* head, int locate){
    Node* temp = head;
    Node* p;
    if (locate < 0)
        return false;
    while (locate--){
        if (temp == NULL){
            return false;
        }
        temp = temp->next;
    }
    p = temp->next->next;
    free(temp->next);
    temp->next = NULL;
    temp->next = p;
    return true;
}
//获取链表长度(不包括头节点)
int Size_List(Node* head){
    Node* temp = head;
    int size = 0;
    while (temp->next){
        temp = temp->next;
        size++;
    }
    return size;
}
//链表的三种排序(选择,插入,冒泡)
bool Sort_List(Node* head){
    int t = 0;
    int size = Size_List(head);
    //选择排序
    /*for (Node* temp = head->next; temp != NULL; temp = temp->next){
        for (Node* p = temp; p != NULL; p = p->next){
            if (temp->data > p->data){
                printf("换%d和%d
", temp->data, p->data);
                t = temp->data;
                temp->data = p->data;
                p->data = t;
            }
        }
    }*/
    //插入排序
    /*for (Node* temp = head->next->next; temp != NULL; temp = temp->next){
        for (Node* p = head; p->next != NULL; p = p->next){
            if (p->next->data > temp->data)
            {
                printf("换%d和%d
", temp->data, p->next->data);
                t = temp->data;
                temp->data = p->next->data;
                p->next->data = t;
            }
        }
    }*/
    //冒泡排序
    for (Node* temp = head->next; temp->next != NULL; temp = temp->next){
        for (Node* p = head->next; p->next != NULL; p = p->next){
            if (p->data > p->next->data){
                t = p->data;
                p->data = p->next->data;
                p->next->data = t;
            }
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/xin1998/p/7742317.html