- 谢谢您的到来,一起加油吧,少年!
- bilibili点个关注叭
- 海鸟跟鱼相爱,只是一场意外
- Leave Out All The Rest
11 2022 档案
摘要:二叉树链式结构 前一篇博客介绍了二叉树的顺序结构,是通数组来存储的,这里我们通过创建链式结构来存储,在堆上申请空间,结构如下: template <class DateType> struct BinaryTreeNode { DateType data;//数据域 BinaryTreeNode*
阅读全文
摘要:堆排序 堆排序的前提 堆排序:是指利用堆这种数据结构所设计的一种排序算法。堆排序通过建大堆或者小堆来进行排序的算法。 举个例子:给定我们一个数组{2, 3,4, 2,4,7},我们可把这个数组在逻辑上看成是一种堆的结构,然后进行建堆,建大堆(或建小堆)我们就可以在堆顶选出一个最大(最小)的数,通过不
阅读全文
摘要:树的基本概念和结构 树的相关概念 **节点的度:**一个节点含有的子树的个数称为该节点的度; 如上图:A的为2 叶节点或终端节点:度为0的节点称为叶节点; 如上图:D、F、G、H为叶节点 **非终端节点或分支节点:**度不为0的节点; 如上图:A、B…等节点为分支节点 **双亲节点或父节点:**若一
阅读全文
摘要:栈 栈的概念和结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)加粗样式的原则。 入栈:从栈顶放入数据的操作。 出栈:从栈顶取出元素的操作。 栈的实现
阅读全文
摘要:带头双向链表的结构 看下面的图,就是我今天要给大家分享有结构——带头双向循环链表。这里的头是不存放任何数据的,就是一个哨兵卫的头结点。 用代码来表示每一个节点就是这样的: 数据域和指针域 两个指针,一个指向前驱结点,一个指向后继结点 给定两个构造函数,有参和无参,分别对结点的指针域和数据域进行初始化
阅读全文
摘要:单链表 **概念:**链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 值得注意的是: 1.链表的在逻辑是连续的,物理上不一定是连续的; 2.现实中节点是从堆上申请的。 链表的实现 链表的单个结点的定义 就像这个图一样,一个空间用了存放数据(数
阅读全文
摘要:顺序的概念与结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。 一般分为两种:静态顺序表和动态顺序表 静态顺序表 #define N 100 typedef int SLDataType;//以便可以存储不同类型的数据 type
阅读全文
摘要:stack stack介绍 stack是一种先进后出的数据结构,只有一个出口,类似于栈。stack容器哦允许新增元素,移除元素,取得栈顶元素,但是除了最顶端之后,没有任何其他办法可以存取stack的其他元素,换句话说,stack不允许有遍历的行为。 元素推入栈的操作称为:push 元素推出栈的操作称
阅读全文
摘要:list介绍 list的本质是一个带头的双向循环链表。 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另 一个是存储下
阅读全文
摘要:迭代器 四种迭代器 容器类名::iterator 迭代器名;//正向迭代器 容器类名::const_iterator 迭代器名;//常量正向迭代器,const修饰,只能用于读取容器内的元素,不能改变其值 容器类名::reverse_iterator 迭代器名;//反向迭代器 容器类名::const_
阅读全文
摘要:引入 void mySwapint(int &a, int &b) { int tmp = a; a = b; b = tmp; } void mySwapdouble(double& a, double& b) { double tmp = a; a = b; b = tmp; } 不知道大家看到
阅读全文
摘要:继承 概念:继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。 语法: //基类(父类)
阅读全文
摘要:内存分区 栈区(stack):存放函数形参和局部变量(auto类型)和返回值,由编译器自动分配和释放 堆区(heap):用于动态内存分配该区由程序员申请后使用,需要手动释放否则会造成内存泄漏。如果程序员没有手动释放,那么程序结束时可能由OS回收 全局/静态存储区:存放全局变量和静态变量(包括静态全局
阅读全文
摘要:运算重载符 概念: 运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。 函数原型: 返回值 operator操作符(参数列表) 注意: 运算符重载,就是对已有的运算符重新进行定义,赋予其另外一种功能,以适应不同的数据类型 不能通过重载
阅读全文
摘要:面向过程与面向对象 C语言是面向过程的,关注的是过程(函数),分析出求解问题的步骤,通过函数调用逐步解决问题。 C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。 类的引入与定义 类的引入 C语言中,结构体内部只能定义变量,C++中的结构体不仅可以定义变量,还可
阅读全文
摘要:命名空间 概述 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。 举个例子: #include <s
阅读全文
摘要:线程池 介绍 线程池: 一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处
阅读全文
摘要:预备知识 源IP地址和目的IP地址 IP地址在上一篇博客中也介绍过,它是用来标识网络中不同主机的地址。两台主机进行通信时,发送方需要知道自己往哪一台主机发送,这就需要知道接受方主机的的IP地址,也就是目的IP地址,因为两台主机是要进行通信的,所以接收方需要给发送方进行一个响应,这时接收方主机就需要知
阅读全文
摘要:网络的发展 网络的发展有下面几个阶段: 独立模式:计算机最开始是以单机模式被广泛使用的。每一台计算机都是独立的,之间不能够进行数据共享与通信 网络互联: 计算机之间可以链接在一起,完成数据共享,计算机之间还可以进行相互通信 局域网(LAN): 一片区域内的计算机通过路由器和交换机连接在一起,可以用来
阅读全文
摘要:Linux多线程之生产者消费者模型以及POSIX信号量,觉得有用的小伙伴点个关注吧~
阅读全文