循环链表的结构与特点 循环链表也分为单链循环和双链循环,和普通的链表相比,区别就是遍历到尾节点之后,next指针不是空指针,而又重新指向了head。
还是先给出源码
cpp循环链表
具体实现 1.类定义 class Node { public: int data; Node * next; }; class CirList { private: Node * head; }; 2.
Read more →
双向链表的原理与特点 双链表相比单链表而言,有头结点和尾节点,而每个数据节点也有前后两个节点指针。
源码地址 码云链接
具体实现及原理 1.类结构定义 class Node { public: int data; Node * last; Node * next; }; class DoubleNode { private: Node * head; //头结点 Node * tail; //尾节点 }; 定义了head和tail节点,以及每个数据节点的前后指针,最基本的双向链表。
Read more →
单链表的特点与运用场景 单链表是线性表的一种,对比顺序存储来说,链表的链式存储,也存在一定的优缺点。
优点:适用于不确定元素的个数,以及需要频繁地进行增删元素,查找元素的情况。
缺点:实现难度较顺序表更高,存储密度更低(同样的内存空间,需要存放节点指针的地址和存储的内容)
单链表的数据结构 data域–存放结点值的数据域 next域–存放结点的直接后继的地址(位置)的指针域(链域)
也正因为如此,才方便了我们插入和删除数据。
源码
单链表各模块详解 1.
Read more →
位运算是什么? 程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。
实际运用 1.找出数组中只出现过一次的数 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
题目的关键点是,其他数都出现了两次,这时可以想到异或的妙用。
a^a = 0; a^0 = a; a^b^a = a^a^b = 0^b = b; 通过前两条特性,以及最后的异或交换律,我们只需要将数组的每个元素依次异或,最后的结果就是只出现一次的那个数了。
Read more →
什么是动态规划? 动态规划(Dynamic Programming)是多将阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解的算法。
适用条件 任何思想方法都有一定的局限性,超出了特定条件,它就失去了作用。同样,动态规划也并不是万能的。适用动态规划的问题必须满足最优化原理和无后效性。
动态规划的运用 爬楼梯问题 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 我们可以找出其中的规律:
Read more →