KiranWang
某互联网大厂资深研发工程师。
展开
-
C++ Lambda表达式
一、Lambda表达式的基本构成:C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。①函数对象参数; [],标识一个Lambda的开始,这部分必须存在,不能省略。函数对象参数是传递给编译器自动生成的函数对象类的构造函数的。函数对象参数只能使用那些到定义Lambda为止时Lambda所在作用范围内可见的局部变量(包括Lambda所在类的this)。函数对象参数有以下形式: 空。没有使用任何函数对象参数。 =。函数体内可以使用Lambda所在作用范...原创 2020-11-13 14:34:07 · 213 阅读 · 0 评论 -
(七)、排序算法:归并排序
一、归并排序的步骤 1、将要排序的一组数据拆成两组元素个数相等的数组,并对每一个数组继续拆分,直到拆分后的每个数组的元素个数是1为止。 2、将相邻的两个子组合并成一个有序的大组 3、不断的重复步骤,直到最终只有一个组为止 步骤图如下: 二、代码和运行结果:#include <iostream>using namespace std;template <class T>class Merg...原创 2020-11-03 14:51:05 · 235 阅读 · 0 评论 -
(六)、排序算法:希尔排序
一、希尔排序的步骤 1、选定一个增量h,按h作为分组的依据,对数据进行分组 2、对分好组的每一组数据完成插入排序 3、减小增量,最小为1,重复第2步二、增量h的选定 h初始值的选定规则: int h = 1; //计算h的初始值,num为数组的元素个数 while (h < num / 2) { h = 2 * h + 1; } h的循环规则 h = h/2;...原创 2020-10-30 17:12:45 · 227 阅读 · 0 评论 -
(五)、排序算法:基序排序
一、基序排序的的基本思路 将整数分别从低位到高位进行排序,即先按照个位进行排序、再按照实为进行排序、再百位、千位、、、、、、、、二、动态演变过程: 以{179,208,306,93,859,984,55,9,271,33};这个数组为例: 三、代码和测试结果#include <iostream>#include <list>using namespace std;#define DATA_NUM (10)//获取一个数...原创 2020-10-15 15:24:33 · 817 阅读 · 0 评论 -
图(四)----深度优先搜索BFS
一、广度优先搜索的大致思路: 广度优先搜索的方式如下图,跟DFS相对立,BFS是一层一层从上往下进行搜索的二、本例子也是用如下邻接矩阵的方式三、代码和测试结果#include <iostream>#include <stack>#include <queue>using namespace std;#define MAX_VERTEXS (20)class Vertex //顶点{public: Vertex...原创 2020-10-14 19:47:09 · 134 阅读 · 0 评论 -
图(三)----深度优先搜索DFS
一、深度优先搜索的大致思路: 如下图所示:沿着一条路走到底,然后再折回来沿着另一条路继续走到底....二、本次也是以图的邻接矩阵的数据结构来测试,如下数据结构三、代码和测试结果#include <iostream>#include <stack>using namespace std;#define MAX_VERTEXS (20)class Vertex //顶点{public: Vertex(char lab) :lab...原创 2020-10-13 19:35:30 · 710 阅读 · 0 评论 -
图(二)----邻接表
一、用邻接表实现的图的结构如下:每个Vertex相连接的所有的Vertex都用一张链表串连起来,串连的顺序不分先后。二、代码实现#include <iostream>#include <list>using namespace std;class Vertex{public: Vertex(char lab) :label(lab) {}private: char label;};template <class T>cl原创 2020-09-23 16:35:35 · 294 阅读 · 0 评论 -
图(一)----邻接矩阵
写在前面:本篇写用邻接矩阵实现的数据结构-----图(一)、邻接矩阵实现的图的构成如下图 图是有顶点(Vertex)和边(Edge)组成。(二)、把Vertex的连接方式用一张表来画出来1表示两个顶点有连接,0表示没有连接。(三)代码实现这个图:#include <iostream>using namespace std;#define MAX_VERTEXS (20)class Vertex //顶点{public: Vert...原创 2020-09-21 15:15:49 · 834 阅读 · 0 评论 -
用二叉树实现大顶堆
一、大顶堆与小顶堆的数据结构 即:大顶堆的每个分支上元素越来越小 小顶堆的每个分支上元素越来越大二、大顶堆可以用数组实现,也可以用链表实现,本篇用数组来实现大顶堆一个规律, 从上图中可以看出: patent_index = (child_index -1 ) /2; //取整三、大顶堆的两个操作:插入新节点和删除根节点四、代码实现和运行结果#include <iostream>using names...原创 2020-09-14 16:51:21 · 793 阅读 · 0 评论 -
C++红黑树收关(五)--------红黑树其他方法补全
1、本篇补全红黑树的其他方法 find(); findMin(); findMax(); isEmpty(); makeEmpty();2、上代码#include <iostream>using namespace std;template < class T>class RedBlackTree; //红黑树template <class T>class RedBlackTreeNode...原创 2020-09-07 20:04:53 · 513 阅读 · 0 评论 -
C++红黑树(四)--------insert()函数完善
一、前面的文章 C++红黑树(一)--------红黑树的创建和插入Node C++红黑树(二)--------红黑树的单旋转 C++红黑树(三)--------红黑树的双旋转二、知识准备 (1)、 我们前面的章节只是把insert()函数实现了,但并没有实现插入的红黑树的平衡。所以,本节将完善insert()函数和实现红黑树平衡。 (2)、处理有两个红色孩子的节点 (3)、插入节点后,处理红色的父节点。 (4)、新插入的...原创 2020-09-01 09:14:44 · 247 阅读 · 0 评论 -
C++红黑树(三)--------红黑树的双旋转
一、前面的文章 C++红黑树(一)--------红黑树的创建和插入Node C++红黑树(二)--------红黑树的单旋转二、红黑树单旋转的问题: 单旋转并不能实现红黑树的平衡,改变不了节点的深度,如下图三、双旋转的结果如下图: 四、以下图为例,对下图中的k3做一次双旋转 代码:#include <iostream>using namespace std;template < class...原创 2020-08-27 19:57:19 · 347 阅读 · 0 评论 -
C++红黑树(二)--------红黑树的单旋转
1、 红黑树的单旋转包括向左转和向右转,下图为左旋转的图,详细看下每个节点是如何移动的,下图为左右单旋转的旋转结果状态图2、然后我们来实现如下图的红黑树,并进行左右旋转的测试3、代码如下(接着上篇的代码:C++红黑树(一)--------红黑树的创建和插入Node)#include <iostream>using namespace std;template < class T>class RedBlackTree; //红黑树...原创 2020-08-19 17:04:32 · 331 阅读 · 0 评论 -
C++红黑树(一)--------红黑树的创建和插入Node
前言: 本篇开始,写一个红黑树的小系列,红黑树的结构非常复杂,所以需要好几篇才能写完。本篇主要介绍红黑树的前期理论储备和创建以及插入节点。一、红黑树的规则: 1、每一个节点不是红色的就是黑色的。 2、红黑树的根总是黑色的。 3、如果节点是红色的,则它的子节点必须是黑色的 4、从根到叶节点的每条路径,必须包含相同数目的黑色节点。二、今天要创建的红黑树是这样的:代码如下:#include <iostream>us...原创 2020-08-17 15:54:19 · 470 阅读 · 0 评论 -
C++二叉查找树
#include <iostream>using namespace std;template <class T> class BST;template <class T>class Element{public : T key;};template <class T>class BstNode{ friend class BST<T>;public://private: Element<T&.原创 2020-08-07 11:22:38 · 206 阅读 · 0 评论 -
C++二叉树
本篇主要写二叉树的结构,中序、前序、后序、层序遍历算法。二叉树的结构,本篇以如下这个二叉树进行遍历:中序遍历:左子节点---->中间节点---->右子节点前序遍历:中间节点----->左子节点---->右子节点后序遍历: 左子节点----->右子节点----->中间节点层序遍历:一层一层的从上往下遍历以上图二叉树结构为例,开始编写代码:#include <iostream>#include <queue>us.原创 2020-07-31 11:05:14 · 3042 阅读 · 0 评论 -
C++链式栈
#include <iostream>using namespace std;template <class T> class LinkStack;template <class T>class LinkNode{ friend class LinkStack<T>;public:private: LinkNode(const T &dt, LinkNode *node = 0) :data(dt), link(node) .原创 2020-07-21 21:17:17 · 259 阅读 · 0 评论 -
C++双链表
#include <iostream>using namespace std;template <class T> class DblList;template <class T>struct DblNode{ friend class DblList<T>;public: DblNode(T &dt) :data(dt) {} DblNode() {}//private: T data; DblNode *lLink;.原创 2020-07-11 12:18:47 · 185 阅读 · 0 评论 -
C++链表和链表迭代器
直接上代码啦。。。。。。。。。。。。。#include <iostream>using namespace std;template <class T> class List;template <class T> class ListIterator;template <class T>class Node{public: template <class T > friend class List; friend c原创 2020-07-04 16:04:17 · 1325 阅读 · 0 评论 -
顺序栈
#include <iostream>#include <algorithm>using namespace std;template <class T>void change_size(T* &a, int oldSize, int newSize){ T* p = new T[newSize]; int size = min(oldSize,newSize); copy(a,a+size,p); delete [] a; a = .原创 2020-06-30 20:24:21 · 213 阅读 · 0 评论 -
(四)、排序算法:快速排序
快速排序的思想: 选择数组中的一个数作为中轴线,然后以这个中轴线为中心,大于中轴线的数据放到右边,小于中轴线的数据放到左边, 然后每次比较完后再变中轴线的位置,不断比较下去代码:#include <iostream>using namespace std;template <class T>void quick_sort(T arry[], int left, int right){ if (left < right) { ...原创 2020-06-15 16:20:18 · 175 阅读 · 0 评论 -
(三)、排序算法:插入排序
插入排序:从队列外边每进来一个数据,跟已序队列从最大值开始比较,找到合适的位置后, 移动已序队列,并将新来的数据插入到对应的位置。code 和 调试结果:#include <iostream>using namespace std;template <class T>void insert_sort(T list[],int n){ T in, out,tmp; for (out = 1; out < n; out++) //out从下标1.原创 2020-06-06 15:46:13 · 271 阅读 · 0 评论 -
顺序查找与折半查找(二分查找)与递归折半查找
顺序查找:适用于所有数组,效率低二分查找:使用与已序数组,效率高一、顺序查找#include <iostream>using namespace std;void select_sort(int list[], int num){ int min_pos = 0; //每次循环最小数的位置 for (int i = 0; i < num - 1; i++) { min_pos = i; for (int j = i + 1; j < n.原创 2020-06-01 11:28:28 · 392 阅读 · 0 评论 -
(二) 排序算法: 选择排序
选择排序的要点:从当前未排序的整数中找一个最小的整数,把它放到select_sort的整数列表的最后,(注意两个关键词:已排序和未排序),即选择排序是选最小的数值放到左边。对比冒泡排序:冒泡排序每次比较都有可能发生交互,而选择排序每次遍历只记录当前遍历最小数值的下标,这次遍历完成后只发生一次交换。代码和调试结果:#include <iostream>using namespace std;void select_sort(int list[], int num){.原创 2020-05-24 10:42:55 · 217 阅读 · 0 评论 -
(一)排序算法:最简单的排序算法------冒泡排序
要点:从左到右扫描数据,选择最大的数据,放在右边代码:#include <iostream>using namespace std;void bubble_sort(int list[], int n){ for (int i = 0; i < n - 1; i++) //比较n-1次 { for (int j = 0; j < n - 1 - i; j++) //每一次循环少比较一次 { if(list[j]> list[j + .原创 2020-05-23 17:01:21 · 221 阅读 · 0 评论 -
C++模板类实现链式queue
写在前面:本篇介绍用C++的模板类来实现一个动态链表链表的结构:代码、注释、运行结果#include <iostream>using namespace std;template <class Object>class Queue{public: Queue(); //构造函数 ~Queue(); //析构函数 bool isEmpty(); //判断queue是否为空 void makeEmpty(); //清空queu.原创 2020-05-21 09:30:32 · 303 阅读 · 0 评论 -
C++模板类实现循环queue
写在前面: 本篇用C++的模板类手撸一个循环队列,在实现过程中,前面先用几张图介绍思路,后面再上代码和运行结果。正文: Queue的几种行为: 然后就是代码段和注释:#include <iostream>using namespace std;template<class T>class Queue{public: Queue(int defaultCapacity = 10); void...原创 2020-05-20 10:05:06 · 706 阅读 · 0 评论