自学内容网 自学内容网

C++学习笔记

-------------------------------------------------------------------

给一个无单向不循环链表的首结点l,编写程序反转链表,并返回反转后的链表首结点

struct llist_node {
    int val;
    struct llist_node *next;
};

struct llist_node *func(struct llist_node *l)
{
    struct llist_node *cur = l;
    struct llist_node *prev = NULL;    // 指向链表当前节点的上一个节点
    struct llist_node *next = NULL;    // 指向链表当前节点的下一个节点

    while (cur) {
        next = cur->next;
        cur->next = prev;
        prev = cur;
        cur = next;
    }

    return cur;
}

-------------------------------------------------------------------

二、STL模板库----算法(algorithm)

                我们所有的算法都是在algorithm头文件中声明,所以在使用前需要包含头文件

#include<algorithm>

        1、排序

                1)sort()(基于快排实现)
/*
        sort --- 对[first,last)范围内的成员进行排序(默认升序排序)
        first :一种随机访问迭代器,用于指定要排序范围的起始成员
        last  :一种随机访问迭代器,用于指定要排序范围的最后一个成员的下一个位置
*/
template <class RandomAccessIterator>  
void sort (RandomAccessIterator first, RandomAccessIterator last);

/*
        sort --- 对[first,last)范围内的成员进行排序(默认升序排序)
        first :一种随机访问迭代器,用于指定要排序范围的起始成员
        last  :一种随机访问迭代器,用于指定要排序范围的最后一个成员的下一个位置
        comp  :调用者自己定义的排序方法
*/
template <class RandomAccessIterator, class Compare>  
void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

/*

        ps:

        时间复杂度为:O(N*log2(N)),N为first与last之间的距离

        1、容器支持的迭代器类型必须是随机访问迭代器,这意味着,sort()只对array、vector、deque这3个容器提供支持。

        2、如果对容器中指定范围的成员做默认升序排序,必须保证该成员类型支持<运算符的运算。

        3、sort()函数在实现排序时,需要交换容器中元素的存储位置,这种情况下,如果容器中存储的是自定义的类对象,则该类内部必须提供移动构造函数和移动赋值运算符。

*/

                2)stable_sort(基于归并实现)
/*
        stable_sort--- 对[first,last)范围内的成员进行排序(默认升序排序)
        first :一种随机访问迭代器,用于指定要排序范围的起始成员
        last  :一种随机访问迭代器,用于指定要排序范围的最后一个成员的下一个位置
*/
template <class RandomAccessIterator>  
void stable_sort(RandomAccessIterator first, RandomAccessIterator last);

/*
        stable_sort--- 对[first,last)范围内的成员进行排序(默认升序排序)
        first :一种随机访问迭代器,用于指定要排序范围的起始成员
        last  :一种随机访问迭代器,用于指定要排序范围的最后一个成员的下一个位置
        comp  :调用者自己定义的排序方法
*/
template <class RandomAccessIterator, class Compare>  
void stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp);

/*

        ps:

        空间足够:时间复杂度为:O(N*log2(N)),N为first与last之间的距离

        空间不足:时间复杂度为:O(N*log2(N)2),N为first与last之间的距离

        1、同sort()函数

        2、可以保证不改变相等元素的相对位置。

*/                 

                3)partial_sort(基于交换元素存储位置实现)
/*
        partial_sort--- 对[first,last)范围内的数据进行筛选并排序(默认升序排序)
        first  :一种随机访问迭代器,用于指定要排序范围的起始成员
        middle :一种随机访问迭代器,用于指定要排序的子范围的最后一个成员的下一个位置
        last   :一种随机访问迭代器,用于指定要排序范围的最后一个成员的下一个位置
*/
template <class RandomAccessIterator>  
void partial_sort (RandomAccessIterator first, 
                   RandomAccessIterator middle,                     
                   RandomAccessIterator last);
/*
        partial_sort--- 对[first,last)范围内的数据进行筛选并排序(默认升序排序)         first  :一种随机访问迭代器,用于指定要排序范围的起始成员
        middle :一种随机访问迭代器,用于指定要排序的子范围的最后一个成员的下一个位置         last   :一种随机访问迭代器,用于指定要排序范围的最后一个成员的下一个位置
        comp   :调用者自己定义的排序方法
*/
template <class RandomAccessIterator, class Compare> 
void partial_sort (RandomAccessIterator first, 
                   RandomAccessIterator middle, 
                   RandomAccessIterator last, 
                   Compare comp);

/*

        ps:

        时间复杂度为:N*log(M)

        其中 N 指的是 [first, last) 范围的长度,M 指的是 [first, middle) 范围的长度。

        1、同sort()函数

        2、partial_sort() 会将 [first, last) 范围内最小(或最大)的 middle-first 个元素移动到 [first, middle) 区域中,并对这部分元素做升序(或降序)排序。剩余的元素不一定保持原来相对顺序。

*/

        2、查找         

                1)find(基于==运算符)
/*
        find --- 在[first,last)范围内找到和目标元素值相等的第一个元素
        first :一种输入迭代器,用于指定要排序范围的起始成员
        last  :一种输入迭代器,用于指定要排序范围的最后一个成员的下一个位置
        val   : 要查找的值
        return : successed ---  返回一个输入迭代器,指向查找到的第一个元素
                  failed    ---  返回一个输入迭代器,与last指向相同
*/
template <class InputIterator, class T>   
InputIterator find (InputIterator first, InputIterator last, const T& val);

/*底层实现*/

template<class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val)
{
    while (first!=last) {
        if (*first==val) return first;
        ++first;
    }
    return last;
}

/*        

        ps:

        1、使用find()函数时,必须保证查找的元素支持==运算符

*/

                 2)find_if(基于==运算符)
/*
        find_if --- 在[first,last)范围内找到第一个符合查找规则(返回true)的元素
        first :一种输入迭代器,用于指定要排序范围的起始成员
        last  :一种输入迭代器,用于指定要排序范围的最后一个成员的下一个位置
        pred  : 用户自定义的查找规则
        return &

原文地址:https://blog.csdn.net/qq_45882170/article/details/140573731

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!