C/C++类型转换总结 发表于 2018-03-13 | 分类于 C++ 类型转换基础对象的类型定义了对象能包含的数据和能够参与的运算,如果在表达式中混杂了多种不同的类型,编译器可能(有些类型转换非法则编译错误)会帮我们进行隐式的类型转换。如果两种类型能够进行相互转换则称两种类型是关联的。类型在进行隐式转换总体规则向上提升,即转换成精度和表达范围更广的数据类型。类型转换按 ... 阅读全文 »
struct位段和字节对齐原理及其计算法则 发表于 2018-03-12 | 分类于 C++ 位段基础知识在实际编程过程中有些数据存储可能只需要1位或者几个比特位就可以,如果为了几位数据而定义一个完整字节将会浪费大量内存,正是由于这个原因,C语言提供一种称为位段(又称为位域)的数据结构。位段基本定义如下: 123456789struct pidTag{ unsigned int i ... 阅读全文 »
结构体struct与类class的关系和区别 发表于 2018-03-12 | 分类于 C++ struct与class基础在C中,struct是用来定义自定义类型的,通过基本数据类型组合成一种新的抽象数据类型,其只能定义成员变量而不能定义函数。而C++中的struct有较大的变化,C++极大地扩充了struct的含义,C++中的struct可以定义函数,可以定义构造函数、析构函数,可以继承, ... 阅读全文 »
C++多态分类及其实现和C模拟实现多态 发表于 2018-03-12 | 分类于 C++ 多态基础多态是指程序在运行时,相同的消息给予不同的对象可能会产生不同的行为,可以简单概括为“一个接口,多种方法”。按照多态发生的时机分为动态多态和静态多态。多态是面向对象程序设计三大特征之一(封装、继承、多态)。 动态多态动态多态是指在运行时确定采用的行为,这在C++中动态多态是通过虚函数和继承实现 ... 阅读全文 »
C++输入输出基础 发表于 2018-03-12 | 分类于 C++ C++输入输出基础知识C++语言自身没有定义输入输出语句,其通过标准库来提供IO能力。在C++中iostream库为常用的IO库,该库包含两个基础类型istream和ostream,分别表示输入流(即读)与输出流(即写)。其中流指的是一个字符序列。标准库中定义了四个IO对象,分别为cin(标准输入) ... 阅读全文 »
数据结构之二项队列的定义与实现 发表于 2018-03-10 | 分类于 数据结构 二项队列基础知识二项队列不是一棵堆序的树,而是堆序树的集合,称为森林。堆序树中的每一棵树叫着二项式树,高度为0的二项树是一棵单节点树,高度为k的二项树Bk的树通过将一棵二项树Bk-1附接到另一棵Bk-1的根上构成,如下图所示为二项式树:图片来源 每项棵的节点个数按照高从0到k二进制表示为(1)(1 ... 阅读全文 »
数据结构之斜堆的定义与实现 发表于 2018-03-10 | 分类于 数据结构 斜堆基础知识斜堆又称为自调节堆。其和左式堆最大的区别是不保留零路径长信息以及不做结构限制,可以总结为斜堆是具有堆序的二叉树,但是对结构不做任何限制。其所有操作最坏情况O(n),每次操作的摊还时间为O(log2n)。和左式堆相似,斜堆的主要操作也是合并,但斜堆除了右路径上最大者不交换左右子节点,其余合 ... 阅读全文 »
数据结构之左式堆的定义与实现 发表于 2018-03-10 | 分类于 数据结构 左式堆基础知识左式堆又称为左高树、左偏堆、左倾堆、左偏树,是一种二叉树。左式堆和二叉堆一样也具有结构性和堆序性,但是和二叉堆不同的是,左式堆不是理想平衡的而且趋于非常不平衡。左式堆是一种非常方便进行合并的堆,二叉堆是一种特殊的左式堆。 左式堆的性质 节点的键值小于或等于左右子节点 任意节点X,左子节 ... 阅读全文 »
散列表的定义与实现 发表于 2018-03-09 | 分类于 数据结构 散列基础知识散列(hashing)是指散列表的实现,散列是一种用于以常数平均时间进行插入、删除、查找的的数据结构。但是散列表并不包含任何元素之间的排序信息,因此散列表不支持诸如查找最大元素、最小元素等需要排序的操作。散列表一般的实现中是采用一个固定大小的数组以及一个散列函数将关键字映射到数组的某一个 ... 阅读全文 »
优先队列的定义与二叉堆实现 发表于 2018-03-09 | 分类于 数据结构 优先队列基础优先队列是指一种数据结构,其每个元素都有各自的优先级,出队顺序由元素的优先级决定。优先队列一般使用堆来实现。优先队列一般至少需要支持如下操作: 插入带优先级的元素 取出最高优先级的元素 查看最高优先级的元素 优先队列有多种实现方式,分别简述如下: 无序顺序表:在表尾插入,删除时遍历 ... 阅读全文 »