![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
利来利往
幽默,诚实,守时,守信,适应能力强。
展开
-
深度优先遍历(DFS)和广度优先遍历(BFS)
深度优先遍历 主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底...,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。 广度优先遍历 广度优先遍历,指的是从图的一个未遍历的节点出发,先遍历这个节点的相邻节点,再依次遍历每个相邻节点的相邻节点。 DFS 一般是解决连通性问题,而 BFS 一般是解决最短路径问题,一般深度优先遍历用的是栈,而广度优先遍历要用队列来实现转载 2022-01-10 16:50:05 · 315 阅读 · 0 评论 -
【面试】C++_数据结构_树
1.你了解红黑树吗,他的特性 2.你了解b+树的数据结构吗 3.二叉树的遍历有哪些方式 4.完全二叉树 红黑树的特性: (1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。 (3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (4)如果一个节点是红色的,则它的子节点必须是黑色的。 (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。[这里指到叶子节点的路径] 应用 map set B树的概念是为了解决一些现实问题而提出的,.原创 2021-04-19 13:34:16 · 81 阅读 · 0 评论 -
【面试】C++_数据结构_链表
链表 怎么判断一个链表是环形,6或9形状呢,怎么判断 二个链表合成一个链表,时间和空间复杂度 方法一:哈希表法 这里我们采用set这一关联容器。设置set的下标为ListNode*,遍历该链表的每一个结点, 将未出现过的链表结点存储至set中,会出现两种情况: 发现指向某一结点的指针已经存储过了,就说明这个链表是环形的。 发现指向某一结点的指针是NULL,则说明这条链表有尾巴,不是环形的。 方法二:快慢指针法 我们可以思考一个问题:两位运动员在环形跑道上什么情况下会相遇? 是当他们速度一致吗?显然不是,原创 2021-04-19 13:02:33 · 82 阅读 · 0 评论 -
【C++服务端技术】队列
链表和锁实现的队列,锁的代码请看其他文章 #pragma once #include <list> #include "AutoLock.h" namespace Extralib { namespace SafeQueue { using namespace Thread; template<typename Data> class safe_queue { private: std::list<Data> the_queue;原创 2020-12-08 10:20:20 · 85 阅读 · 0 评论 -
C++-栈
面试攻略栈 什么是栈 先进后出,后进先出,这就是典型的栈结构。 从栈的操作特性来看,是一种操作受限的线性表,只允许在端插入和删除数据。 为什么需要栈 任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但是暴露了几乎所有的操作,难免会引发错误。 当某个数据集合只涉及在某端插入和删除数据,且满足先进者后出,后进者先出的操作特性时,我们应该首选栈这种数据结构。 栈和队列数据结构的区别 栈是限定只能在表的一端进行插入和删除操作的线性表。队列是限定只能在表的一端进行插入和在另一端进行删除操作.转载 2020-10-27 22:43:57 · 958 阅读 · 0 评论