c++
g33_N
这个作者很懒,什么都没留下…
展开
-
C++模板知识总结
何为模板?在谈模板之前,我们先来说一下如何写一个通用的加法函数?1、函数重载,针对不同的类型去分别实现但是,只要有新类型出现,就得重新添加实现函数,代码复用率不高,牵一发动全身,不好维护。2、使用公共基类,将通用的代码放在公共的基础类里面此方法借助公共基类来编写通用代码,将失去类型检查的优点;对于以后实现的许多类,都必须继承自某个特定的基类,代码维护更加困难。3、宏#define ADD(a,b)((a)+(b))但是宏不可调式,不进行类型检测,安全性不高,有可能产生副作用4、泛型编程原创 2016-11-25 19:11:45 · 533 阅读 · 0 评论 -
由前序遍历和中序遍历重建二叉树(前序序列:1 2 3 4 5 6 - 中序序列:3 2 4 1 6 5)
由前序遍历和中序遍历重建二叉树 前序序列(根-左-右):1 2 3 4 5 6 中序序列(左-根-右):3 2 4 1 6 5 1、由前序遍历可知根节点为第一个元素1,在中序遍历序列中找到1对应位置,则1的左边就是左子树324,右边就是右子树65; 2、在找到前序遍历序列中从第二个位置开始往后找相同数目的节点为左子树234,剩余的就是右子树序列65; 3、根据前序遍历规则可知,左子树序原创 2017-07-28 18:06:56 · 3036 阅读 · 0 评论 -
求二叉树中两个节点的最近公共祖先
要考虑以下三种种情况: 1:二叉树每个节点有parent 2:二叉树是搜索二叉树。 3:就是普通二叉树。原创 2017-07-28 14:13:55 · 997 阅读 · 0 评论 -
判断一棵树是否是完全二叉树
完全二叉树的定义是,前n-1层都是满的,第n层如有空缺,则是缺在右边,即第n层的最右边的节点,它的左边是满的,右边是空的 根据层序遍历遍历二叉树,直到发现一个空节点,若树种还有未被访问的非空节点,则该二叉树不是完全二叉树template<class T>struct BinaryTreeNode{ BinaryTreeNode(T& data) :_data(data)原创 2017-07-28 14:04:25 · 841 阅读 · 0 评论 -
实现itoa()和atoi()
atoi():将字符串转换为整型值 实现代码:enum Status{valid,unvalid};int status = valid;//全局变量标记输入是否非法long long _AtoI(const char* str, bool minus){long long num = 0;while (*str != '\0'){//输入在0-9之间if (*str >原创 2017-08-08 13:54:39 · 795 阅读 · 0 评论 -
选择排序&&堆排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面) 排序思想: 对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用原创 2017-07-31 22:05:18 · 491 阅读 · 0 评论 -
插入排序&&希尔排序
插入排序:在一个已经排好序的记录子集的基础上,每一步将下一个待排序的记录有序插入已经排好序的子集中,直到将所有待排纪录全部插入为止。例如打扑克牌时的抓拍就是插入排序的一个很好的例子,每抓一张牌,插入到合适位置,主导抓完牌为止,即可得到一个有序序列。 适合场景:记录个数少而接近有序的序列 时间复杂度:O(N^2)—最差情况(完全无序) O(N)——最优情原创 2017-07-30 14:53:23 · 541 阅读 · 0 评论 -
求解1+2+3+...+n,要求不能使用乘除法、while、for、if 、else、switch、case等关键字
方法一:利用递归以及&&的短路原理int Sum(int num, int& sum){ num&&Sum(num-1,sum);//递归跳出条件,当num为假时,无需判断后序语句,返回sum+=n return sum +=num;}int main(){ int num= 0; int sum = 0; cin>>num; cout <<原创 2017-07-14 09:52:53 · 7438 阅读 · 0 评论 -
C++平衡二叉树(AVL)
平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 当二叉树不平衡时,可以通过左单旋,右单旋,左右双旋,右左双旋的方式将它调整平衡; 如图: #include<iostream>using namespace std;templ原创 2017-04-18 17:23:42 · 702 阅读 · 0 评论 -
c++构造函数、拷贝构造函数、析构函数、赋值运算符重载
构造函数构造函数的特点:1.是一个特殊的成员函数;2.名字与类名相同;3.有初始化列表;4.创建类类型对象时,由编译器自动调用,在对象的声明周期内只调用一次;5.构造函数可以重载,实参决定了调用哪个函数;6.无参构造函数和带有缺省值得构造函数都认为是缺省构造函数,并且缺省构造函数只能有一个;7.如果没有显示定义构造函数时,编译器会提供一个默认的构造函数;(不一定,有原创 2016-10-17 20:50:33 · 1486 阅读 · 0 评论 -
C++中继承的有关知识
1、继承的概念 在C++中所谓的继承就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类”或者“父类”,新建立的类称为“派生类”或者“子类”,一个新类从已有的类那里获得其已有特性,这种现象称为类的继承,类的继承是用已有的类来建立专用类的编程技术。 class Base//基类Base{ Public:int _p原创 2016-11-06 20:02:45 · 704 阅读 · 0 评论 -
c++ 中多态总结以及虚表剖析
1.对象类型 class B{};class D:public B{};void FunTest(){ D* d;//d的静态类型为D* B* b = d;//b的静态类型为B*,动态类型为D*}多态性是面向对象程序设计的一个重要特征,利用多态性可以设计和实现一个易于扩展的系统。那么何为多态呢?多态就是向不同的对象发原创 2016-11-14 21:57:52 · 605 阅读 · 0 评论 -
C语言模式实现C++继承和多态
C实现一个struct A和struct B各包含一个int成员a和b,要求达到B继承了A的效果,也就是B里面包含一个A。并且能达到多态的效果,也就是一个A*p指向A调的是A的函数,指向B调用的是B的函数何为继承 ? 定义:在C++中所谓的继承就是在一个已存在的类的基础上建立一个新的类。已存在的类称为“基类”或者“父类”,新建立的类称为“派生类”或者“子类”,一个新类从已有的类那里获得其已有特性,原创 2017-07-28 18:51:50 · 612 阅读 · 0 评论