
数据结构与算法基础(C++)
文章平均质量分 97
本专栏记录本人开始接触C++版算法与数据结构的历程,建议具备离散数学,概率统计,线代等前置学科,如果没有可以边学边补,关于STL,后期会另开一个专栏专门记录。
IOT_LOVER
随便写写
展开
-
二叉树相关(上)
树,二叉树和二叉查找树之前介绍过链表,栈与队列。这些数据结构都是线性且一维的。我们为了打破这种限制,创建一个新的数据结构-树。程序世界中的树与自然界中的树是倒过来的:根在顶,叶子在底。根节点只有子节点,没有父节点;而叶子节点没有子节点,或者子节点是空结构。树的递归定义:空结构是一棵空树;如果t1,t2…tk是不相交的树,则以它们的根作为子节点的数据结构也是一棵树;只有通过(1)(2)产生的数据结构才是树。之前我们曾经探讨过查找算法及其相应的复杂度。就算是一维的链表,也有自组织链表以及跳跃链表原创 2020-06-22 00:03:03 · 301 阅读 · 0 评论 -
递归算法-八皇后问题
递归首先通过一个直观的例子来展示递归的用法:int factorial(int n){ int result = n; if(n > 0) return result * factorial(n-1); if(n == 0) return 1; else { cout << "error" << endl; return 0; }}以上是常用求n!n!n!的代码。注意递归只是被调用的函数名刚好同调用者相同,因此递归调用并不是表面上的调用自原创 2020-05-25 23:27:21 · 447 阅读 · 0 评论 -
栈与队列
前言注意区别,这里的栈与内存管理中的栈不是同一个概念,关于堆栈的概念请参考其他资料,本文介绍数据结构层面上的栈。栈栈是一种线性数据结构,存储以及查找数据时只能访问栈的一端(这是与另外一种线性结构数组的明显区别之一),栈类似于餐厅中的一叠盘子,最后放在顶端,却可以最先被取出,因此栈被称为LIFO(last in/first out)。栈是有空间限制的,有盘子的时候才能取出盘子,放满了以后就不能...原创 2020-03-21 16:05:10 · 197 阅读 · 0 评论 -
链表-数据结构与算法的第一课
前言在学习了C++基础以及算法复杂度分析方法(NP完整性笔者也没有理清,待到吃透再更)后,我们开始学习第一种数据结构——链表。在学习链表之前,相信熟练使用C语言的各位已经掌握了数组这一数据结构 。其有两个局限:编译前就需要知道大小。数组中的每个元素占据的内存单元数是相同的。链表就不存在这些问题,所以它可以分散存储于内存的任何位置,对于双向链表,每一个节点都存有两个地址,分别存放上一个节点...原创 2020-02-16 17:06:38 · 374 阅读 · 0 评论 -
算法基础-复杂度分析
计算复杂度以及渐近复杂度常见的衡量效率的标准:时间和空间。在面试及日常应用中往往更加注重时间复杂度。这并不代表时间复杂度底的算法执行时间就越短,还会受计算机硬件影响以及编程语言限制。例如编译程序就比解释程序快得多,比如C语言和BASIC语言。我们通常使用n表示处理对象的规模,所需的时间为t,那么:如果t=cnt=cnt=cn,则n与t成线性关系。当t=log2nt = log_ 2 nt=...原创 2020-02-01 02:07:16 · 916 阅读 · 0 评论 -
C++输入输出流
在学习算法与数据结构之前,希望大家打好这一方面的基础,标准类库对于之后的学习尤其重要。流和缓冲区为了防止歧义,这里将操作系统下运行的程序统称为文件,对于C++而言,只需要关心输入输出的字节流,而不必关心字节来自何处。为了更高效地处理这样地字节流,例如从硬盘提取字节,单次提取一个字节,重复提取费时费力,通常一次提出512个字节(可能更多),而输入C++程序则通过字节流的方式。那么,每次存放这51...原创 2020-01-20 23:47:31 · 565 阅读 · 0 评论 -
函数对象
STL标准模板库中有容器,迭代器,算法以及函数对象等概念,本文简要介绍函数对象。在C++中可以将()当作普通的函数调用运算符,也可以对其进行重载,STL中大量运用了函数对象的特性。此处介绍一个当中重载()定义函数对象的例子。关于()重载的具体细节请参考C++基础中的运算符重载章节。直接上代码:#include <iostream>#include <functional&...原创 2020-01-12 02:56:16 · 169 阅读 · 0 评论