C++
Keepen
你可真是慢了很多拍呢。
展开
-
LeetCode——二叉树的左右视图(C++语言实现)
问题描述:二叉树的右视图示例:输入:[1,2,3,null,5,null,4]输出:[1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---分析:二叉树按之字形打印(点击蓝字走起)1.第一眼望去和二叉树按之字形打印有点类似,不过只要每层的最后一个节点2.想着就是还按照之字形的思路,每层的遍历结果都用一个vector存放,再把每层..原创 2020-08-02 11:20:36 · 747 阅读 · 0 评论 -
C++/数据结构——按之字型打印一颗二叉树
按之字型打印一颗二叉树问题描述:将一颗二叉树按照之字型打印,结果存放在二维数组中分析:例:如图二叉树,按照之字型打印的结果就是:6、9、8、3、2。1.可以看出这是一种类层序遍历的思想;2.与其说是之字型,我更愿意说是“S”型;3.假定根是第一层,我们可以发现奇数层的节点是从左到右打印的;而偶数层的节点是从右到左打印的;思路: 按照层序遍历的思想,不过现在就是把偶数层的顺序逆置一下。附源码:/*struct TreeNode { in...原创 2020-07-25 20:04:17 · 627 阅读 · 0 评论 -
C++——STL-string的模拟实现
#define _CRT_SECURE_NO_WARNINGS//模拟实现一个string类#include <iostream>#include <string.h>using namespace std;class String {private: char* _str; size_t _capacity; size_t _size; public: size_t npos = -1; typedef char* iterator; typedef .原创 2020-05-16 09:52:45 · 197 阅读 · 0 评论 -
笔试题/C++——24点游戏算法
24点游戏算法一.问题描述给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利输入:4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字]输出:trueorfalse二.思路解析:其中的运算符号,我们用函数指针来取代,根据对应的结合方式,采取不同的循环来实现。附:源代码#include <iostream&g...原创 2020-03-02 22:00:01 · 1530 阅读 · 0 评论 -
C++/数据结构——归并排序(递归和非递归)
归并排序一.算法描述:我们一般采用的是二路归并——折半归并,每次将数字的量缩小一倍;最后再将有序的数组两两合并。二.实现——合并两个有序数组1.意义:在这里,无论是递归还是非递归都是要进行有序数组合并这一步的;2.步骤: 1)将部分有序的数组分割成两个完全有序的数组——需要用到额外的空间来保存数组的值。 2)合并template <cla...原创 2020-02-26 17:33:21 · 891 阅读 · 3 评论 -
C++/数据结构——递归/非递归求二叉树的深度
一.问题描述:求一棵二叉树的深度//二叉树结点的定义struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};二.问题解决:1.递归:1)明确递归边界--树空(深度...原创 2020-01-22 22:56:45 · 841 阅读 · 0 评论 -
C++/数据结构——红黑树的基本操作
红黑树一.概念:本质上还是一棵二叉搜索树,每个节点又多了一个属性——结点的颜色,每个节点不是红色就是黑色。二.性质:1.根节点是黑色2.对于每个节点而言,从该节点到其后代叶节点路径上的黑色结点数目都是相同的3.不能有连续的红色结点出现。三.实现主要是旋转的情况:1.叔叔节点存在且为红色只需修改将父节点、叔叔节点、祖父节点的颜色即可2.叔叔节点不存在...原创 2019-10-19 18:05:33 · 269 阅读 · 0 评论 -
C++/数据结构——AVL树的基本操作
AVL树一.什么是AVL树?AVL树本质上也是一棵二叉搜索树,不过它是一棵高度平衡的二叉搜索树平衡二叉树:左右子树的高度差不超过1;二.如何实现?在二叉搜索树的前提上为每一个结点加入一个平衡因子成员变量,再加入一个指向父节点的指针变量;平衡因子:右子树高度 - 左子树高度三.旋转1.右边的右边高--左单旋2.左边的左边高--右单旋3.左右双旋:...原创 2019-09-15 23:39:58 · 225 阅读 · 0 评论 -
C++——二叉搜索/排序树
二叉搜索/排序树一.什么是二叉搜索树?二叉搜索树就是中序遍历结果有序的二叉树。二.性质:所有的左孩子<根节点<所有的右孩子。如图:三.基本操作四.代码#include <iostream>using namespace std;//二叉搜索树:所有左孩子<根节点<所有右孩子//创建结点template <...原创 2019-08-16 18:57:45 · 127 阅读 · 0 评论 -
C++——List的模拟实现
List的模拟实现在STL中,封装的List能实现的功能有:1.插入元素2.遍历链表3.删除元素4.迭代器访问链表,并可以在访问时修改值以下是List的模拟实现,这里重点强调的是List的迭代器:#include <iostream>using namespace std;//List的实现:////基本的结点template &l...原创 2019-07-01 10:47:12 · 186 阅读 · 0 评论 -
C++——多态、抽象类、虚函数表
多态多态的含义:不同对象,行为不同。一.多态的使用三个要点:1.要在继承关系中才能使用2.必须是虚函数3.调用函数的类型必须是引用/指针虚函数的覆写:1.必须是虚函数2.子类中有相同的函数:与父类函数完全相同(函数名、参数、返回值)例外:1)协变——返回值类型构成继承关系的指针/引用(也可以) 2)析构函数——基类析构函数定义成虚函数...原创 2019-07-07 10:10:49 · 306 阅读 · 0 评论 -
C++——菱形继承、虚继承
继承一.含义:继承来自父类的成员(数据成员和成员函数)二.访问规则:父类成员变量在子类中的访问权限:在父类中的原有权限和继承方式中取最小即可。min(父类中的原有权限,继承方式)三.切片操作子类为父类赋值(对象、引用、指针)父类不能为子类赋值,除非强制类型转换,但是这样操作的结果就是会出现,访问到非法内存的情况。四.菱形继承1.菱形继承的结构如下:...原创 2019-07-03 15:27:42 · 271 阅读 · 0 评论 -
C++——引用
引用一.基本概念1.含义:引用就是给变量起别名。2.特点:①引用的类型与实体类型必须相同。②定义引用时,必须初始化。③一个实体可以有多个引用。④ 引用一经初始化它的指向就不会再发生改变。⑤常引用的值不可更改。⑥引用作函数的返回值时,要保证实体的生命周期大于函数的生命周期。比如:int& add2(int& a, int &...原创 2019-05-04 20:28:03 · 311 阅读 · 3 评论 -
C++——内联函数inline
内联函数先来介绍一下一个程序生成需要经过的几个过程。预处理:展开代码,去除注释、替换宏编译:语义语法纠错、将高级语言代码转换成汇编代码汇编:将汇编代码转换成二进制机器指令链接:链接生成可执行程序所需要的库文件宏的意义就在于:节省了编译的时间但是它的缺点:1.不易读2.不可调试3.没有欸行安全的检查比如:#define MAX(a,b) a>b...原创 2019-05-04 23:50:52 · 218 阅读 · 0 评论 -
C++——auto、nullptr关键字
一.auto关键字1.意义:通过初始化的对象自动推导变量类型。既然是通过初始化来推导,那么用auto关键字定义的变量就必须初始化。2.用法: auto a = 10; cout << typeid(a).name() << endl; auto b = 1.2; cout << typeid(b).name() << endl...原创 2019-05-06 22:57:44 · 353 阅读 · 0 评论 -
C++——类和对象(概念、this指针)
一.类和对象1.含义:(小编自己的理解)类是某些集合的特征的抽象。对象是类的实体。比如:世界上有很多人,但是“人”这个词是一开始就存在的吗。并不是,我们把“人”叫做“人”,那么老外可能就会叫做“person”或者“people”。那么我们就可以说“人”就是一种抽象,就是类;而我们每一个人就相当于是“人”这个类的一个个实体。2.class的定义(1)类的内容有哪些?类内成员都有...原创 2019-05-07 20:36:03 · 373 阅读 · 0 评论 -
C++——类的几个默认成员函数
一.构造函数1.意义:用来初始化类的对象。2.实现:#include <iostream>using std::cout;using std::endl;class Date {public: void Print();private: int _year; int _month; int _day;};void Date::Print() {...原创 2019-05-15 19:44:35 · 248 阅读 · 0 评论 -
C++——类和对象(二)成员初始化列表、静态成员、友元
接着上一次的类和对象篇,再次了解一些类和对象的知识类和对象的三大特性:封装、继承、多态一.构造函数1.成员初始化列表构造函数的作用就是用来为类的对象进行初始化的。之前,进行初始化是在构造函数内部为成员变量进行赋值;现在使用成员初始化列表来进行初始化。例://在构造函数内部进行赋值操作 Date(int year = 1999, int month = 1, in...原创 2019-05-27 20:29:01 · 585 阅读 · 2 评论 -
C++——初识模板
模板1.意义:以达到泛型编程的目的。所谓泛型编程,就是程序代码不受类型的限制。一.函数模板1.格式:template <typename T1,typename T2, ……>返回值类型 函数名 (参数列表) { }这里的关键字typename也可以用class代替。2.例:template <class T>void Swap...原创 2019-05-21 16:18:03 · 122 阅读 · 0 评论 -
C++——初识string类
(一)string类一.常见接口:1.string():构造空的string类对象2.string(const char* s):用字符串s来构造对象3.string(size_t n,char c):string类对象中包含n个字符c4.string(const string& s):拷贝构造5.string(const string& s,size_...原创 2019-05-21 21:38:09 · 192 阅读 · 1 评论 -
C++——用队列实现栈
用队列实现栈一.问题描述:自己设计一个栈,用队列来实现其基本接口。解题思路:1.入栈:向非空队列内插入元素2.出栈:先将非空队列中的前n-1个元素插入到空队列中并出队,再将原非空队列中的元素出队即可。3.获取栈顶元素:即获取非空队列的队尾元素。4.判断栈是否为空:两个队列均为空时即该栈为空。二.代码实现#include <iostream>#...原创 2019-06-13 00:03:21 · 359 阅读 · 0 评论 -
C++——用栈实现队列
用栈实现队列一.问题描述:用栈实现队列的基本操作。基本思路:1.入队:向enter栈中插入元素即可。2.出队:当exit栈不为空时,直接pop即可;exit栈为空,enter栈不为空,将enter栈内的元素出栈并依此入栈到exit栈中,最后pop掉exit栈的栈顶元素即可。3.返回队首元素:与出队操作相似,只是不需要将exit的栈顶元素出栈。4.判断队列是否为空:两...原创 2019-06-13 00:45:54 · 545 阅读 · 0 评论 -
C++——命名空间、重载函数
一.命名空间1.意义:C++中引入命名空间的概念,旨在防止命名冲突与命名污染。2.定义方式:namespace 命名空间名{ //其中定义变量或者函数}2.特点:(1)可以嵌套:即某个命名空间内部还可以再定义另一个命名空间(2)多个命名空间可以使用相同的名字。但是这不就违背了引入命名空间的初衷吗。其实并不是,多个命名空间可以拥有相同的名字,但是命名空间内部的变量...原创 2019-04-25 23:30:50 · 572 阅读 · 0 评论