摘要:
学习数据结构应该是一个循序渐进的过程: 当我们学习数组时,我们要体会数组的优点:仅仅通过下标就可以访问我们要找的元素(便于查找)。 此时,我们思考:假如我要在第一个元素前插入一个新元素?采用数组需要挪动整个数组,且计算机找一块数组大小的连续空间是否容易呢??? 此时,我们不得不学习链表,学习了链表, 阅读全文
摘要:
二叉查找树的删除分为两种方式: 二叉查找树,本质上是一棵排序树,具体不解释了。对于二叉树的删除操作。有两种方式:合并删除和排序删除: 合并删除: 图1 原始二叉树 合并删除的本质在于:假如我们要删除结点A,那么,对于其左右子树B,C应该怎么办呢? 方法是:找到A的左子树中最大值结点(这里是E),实质 阅读全文
摘要:
VMware安装Linux(我安装的是ubuntu),没法上网,上网教程见:https://blog.csdn.net/qq_28090573/article/details/78730552 安装完成Linux,进入系统,显示的是图形界面,但是学习Linux,命令行界面是必不可少的,那么如何调出命 阅读全文
摘要:
对于二叉树的遍历通常习惯采用递归的方法,当树的规模很大的时候,递归的深度就会很深,这就导致了对空间的浪费。在此,我们先不讨论二叉树遍历的本质,以及递归的详细过程。我先先来研究一下,二叉树本身: 图1 二叉树 图1所示为一个二叉树的结构,我们注意结点的特征。结点包含了三个数据:存储值,指向左子节点的左 阅读全文
摘要:
二分查找的算法原理较为简单,在此给出c++代码实现,以及代码中遇到的问题,以及解决方案: 其中,while(){}代码段实现了二分查找的原理,但程序的运行结果并不正确。 我们知道通过 :sizeof(a)/sizeof(a[0])可以得到数组a的长度,但是经过参数传递,我们以为sizeof(vect 阅读全文
摘要:
函数指针可以方便我们调用函数,但采用函数对象,更能体现c++面向对象的程序特性。 函数对象的本质:()运算符的重载。我们通过一段代码来感受函数指针和函数对象的使用: 我们可以看到:函数AddFunc和类Add本质上都是实现了对a+b的加法运算。从功能上讲,两者并无区别,但从设计上讲,两者的区别很大, 阅读全文
摘要:
当继承和动态内存分配的问题交织在一起的时候,我们考虑类实现的时候,就需要考虑更多的东西,先上代码: 上述类声明中,定义了一个基类BaseDMA,以及由该基类衍生的两个子类:LackDMA,HasDMA;其中,LackDMA类不涉及动态内存分配,HasDMA涉及动态内存分配。关于所涉及的其他知识细节, 阅读全文
摘要:
多态性是面向对象程序设计的又一个重要思想,关于多态的详尽描述,请看本人的收藏https://www.cnblogs.com/hust-ghtao/p/3512461.html。这篇博文中,详尽的探讨了多态的一些特性。 在此,我仅仅以白话的方式描述为何要引入多态: 子类继承了基类的方法,但子类可以改变 阅读全文
摘要:
继承是面向对象的一种很重要的特性,先来复习基类的基本知识: 先上一段代码: 先复习基本知识: 1 # ifndef TABLE00_H...# endif 表明:如果之前没有定义TABLE00_H段,则编译# ifndef TABLE00_H...# endif之间程序段,否则不编译,这 能够避免一 阅读全文
摘要:
我们想 像使用基本数据类型一样使用类,自然,类自然也有指针,我们通过下面的代码来领教一下对象指针存在的意义: 首先注意第16行的代码:使用string类定义了字符串数组,注意我们使用string 定义字符串而不是用c风格的char p[]来定义字符串有诸多的好处:因为string类中既包含了科学的内 阅读全文