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("\n");
}
//在链表的第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\n", 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\n", 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;
}

 

全部评论

相关推荐

11-15 19:28
已编辑
蚌埠坦克学院 硬件开发
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务