二叉树练习题 1.将搜索二叉树转换成有序的双向链表思路:由搜索二叉树的特点(左 中序递归,记录前一个结点(初始为空),前一个结点的右指向当前结点,当前结点的左指向前一个结点。Node* ToOrderedDoubleList() //将搜索二叉树转换成有序的双向链表(递归){ Node* prev = NULL; Node* head = _root; while(head &&
STL中map和set详解 在STL中有这两个容器set和map,它们的特性都是:所有元素都会根据元素的键值自动被排序。下面来介绍一下这两个容器和与之相关的几个容器。一、set和map1.set和map的区别和联系:联系:它们的底层实现都是红黑树。区别:set是key形式的,set元素的键值(key)就是实值(value),实值就是键值。而map是key/value形式的,map的所有元素都是pair,同
【平衡搜索树】AVL树 【前言】:之前学过了二叉搜索树,但是二叉搜索树有一个很大的缺陷,就是当当原本的数据有序或者接近有序的时候,这棵树的高度就为N(假设原本的数据个数为N),那么在搜索的时候它的时间复杂度(这里考虑最坏情况下的)就为O(N), 搜索的效率就比较低。那么,为了改进这个缺陷,我们就尽量让这棵搜索树变得比较平衡,降低它的高度,这样就可以提高它的搜索效率。AVL树一、定义:AVL树又称为高度平衡的二
【搜索树】二叉搜索树 二叉搜索树的实现:BinarySearch.h#pragma once#include using namespace std;template struct SearchBinaryTreeNode{ K _key; // 关键字(唯一) V _value; SearchBinaryTreeNode* _left; SearchBinaryTreeNode* _rig
堆实现 及 堆排序 1.Heap.h#pragma once#include #include #include using namespace std;template struct CmpGreat //建大堆{ bool operator()(const T& data1, const T& data2) { return data1>data2; }};template
【二叉树】线索化二叉树 #pragma once#include #include using namespace std; enum PointerTag{ LINK, THREAD,};templatestruct BinaryTreeNode_Thr{ T _data; BinaryTreeNode_Thr* _left; BinaryTreeNode_Thr* _right;
【二叉树】二叉树遍历及基本功能实现 二叉树的基本操作及前,中,后,层序遍历的实现#pragma once#include #include #include using namespace std;template struct BinaryTreeNode{ T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(c
【c++】析构函数中delete this指针 在析构函数中delete this指针,会产生什么样的结果呢?先看看下面这段代码,想想运行结果。#include using namespace std;class A{public: A() { cout<<"A()"<<endl; } ~A() { cout<<"~A()"<<endl; delete this; }};int main(){
【栈应用】迷宫问题 迷宫问题:给定一个迷宫的入口,找出迷宫的一条通路。【解决办法】1.迷宫放在一个文件里,我们将迷宫读取出来存储在一个二维数组中, 用'0'来表示通路,'1'表示不通。2.每次探测当前位置的上下左右,如果是通路,压栈,继续探测;如果不是通路,从栈中弹出,回溯到上一个走过位置。3.利用二维数组下标的界限来判断是否找到出口。【代码】1.Maze.h#pragma onc
【矩阵】对称矩阵及稀疏矩阵的压缩存储 1.稀疏矩阵//稀疏矩阵及其压缩存储#pragma once#include #include using namespace std;templatestruct Triple{ size_t _r; size_t _c; T _value; Triple(size_t row = 0, size_t col = 0, const T& value = T())
【数据结构】广义表的实现 【前言】学完了顺序表,链表这些线性的数据结构,现在开始进入非线性的数据结构了。难度也比线性结构更大,本篇文章对广义表这种数据结构进行介绍并附上其实现的代码,广义表的实现主要应用递归,通过广义表可以更加理解和灵活使用递归,希望能给学习这块知识的朋友们带来帮助。一、广义表概念广义表是线性表的推广,是一种非线性的数据结构,也有人称其为列表。举几个例子:(1)A=() //A是一
【栈和队列】一个数组实现两个栈 学习了栈和队列的基本知识后,我们要利用这些基本知识实现出更多情况的栈和队列,下面通过一些面试题使我们更灵活的设计和使用栈和队列。1.利用一个数组实现两个栈思路:我们已经学过了栈和数组,数组是一块固定大小的存储空间,栈的栈底是固定的,通过栈顶来push,pop元素。(栈顶top指向栈顶元素)通过上面的图片,就能很清晰的看到,我们要用一个数组实现两个栈的话,数组的两
【c++知识归纳】继承与多态(二) 在继承与多态(一)中简单介绍了继承与多态的基础知识,本文将从内存中深入理解c++的继承与多态。本文我选用了较低版本的IDE:【windows 10】系统的vs2008,因为高版本的处理比较复杂,为了看的更清楚,我们选择这个较低版本的编译器。1.虚函数表(虚表)class Base{public: Base() :_b(1) {} virtual void fun(
【c++知识归纳】继承与多态(一) c++是基于面向对象的编程语言,面向对象的三大特性为:封装、继承和多态。本文将我对继承与多态的理解进行了总结归纳,这部分内容对于学习c++编程语言是非常重要的,文章加入我的个人理解,希望能给大家带来帮助,如果有问题欢迎大家指出。一、继承1.什么是继承?为什么有继承?通过继承将有共同部分的、相互联系的类构成一种层次关系,共同部分组成的类一般在最顶端称为基类(父类),其他类直接或间
git介绍及使用教程 前言:版本控制系统是一种记录一个或若干文件内容变化,以便日后查看特定版本修订情况的系统,分为三大类:本地版本控制系统,集中化版本控制系统和分布式版本控制系统。今天我们来学习使用一种分布式版本控制系统——git。一、git的功能简介:1.记录文件的所有历史变化2.随时可恢复到任何一个历史状态3. 多人协作开发或修改4.错误恢复5. 多功能并行开发二、g
【c语言】函数指针的用途 很多初学者学函数指针的时候都会想着学这个到底有什么用嘛,搞这么复杂。哈哈,其实它的存在必然有它的用途喽。下面介绍一下它的两个主要用途:(1)转移表 (利用函数指针数组实现)(2)回调函数机制 (利用函数指针实现,典型应用:qsort快排)下面我们就通过使用来熟悉一下它的这两个用途吧。1.转移表的应用简单计算器的实现#include #include
c语言函数的可变参数列表 一、功能:为什么有可变参数列表呢?它可以实现一个神奇的功能:让一个函数在不同的时候可以接受不同数目的参数。二、实现要求:要实现这样的函数,我们需要使用一个va_list类型的变量和三个宏共同配合来访问我们的参数。要使用它们需要引用头文件#include 下面对他们做一下简单的介绍吧!va_list 其实就是 char*类型下面主要介绍一下这三个为宏:va
【c++巩固练习】c++实现日期计算器、日期万年历(日期类) 日期计算器的功能:1.可以计算两个日期之间相距多少天。例:2016.5.1-2016.4.1 = 302.可以计算一个日期经过n天后的那个日期是什么。例:2016.5.1+40 = 2016.6.10代码实现如下:(环境:vs2013 语言:c++)1.Date.h#pragma once#include using namespace std;class