C++数据结构
Programmer-YU
学习党在线学习 (2020.2入坑)
努力变得更好一些。这样,当我遇见优秀的你时,也可以抬头挺胸,我也不差!
14亿分之一,你好
展开
-
二叉树结构——BTree、BTreeNode
目录二叉树引言二叉树的性质二叉树的存储结构设计二叉树的结点查找操作二叉树中的插入操作二叉树引言 通用树的结构过于复杂,工程中很少会用到这么复杂的树,该如何简化呢?→减少孩子结点数量→二叉树 通用树结构回顾 双亲孩子表示法: 每个结点都有一个指向其双亲的指针 每个结点都有若干个指向其孩子的指针 二叉树树结构引进 孩子兄弟表示法: ...原创 2020-04-05 18:46:07 · 1691 阅读 · 0 评论 -
通用树结构——GTree、GTreeNode
通用树结构工程量比较大,我没时间把每一个点扩展开,详细的附上说明与过程。我浓缩了下步骤,过程全部体现在代码与注释里了。所以希望阅读的小伙伴可以按一个目录为一章的心态,根据目录的顺序与讲解,对照代码一点点的去理解。 其中因为继承,也涉及了Tree与TreeNode中的成员变量,所以对照抽象父类来阅读会更加方便。(https://blog.csdn.net/Es_Study_Yu/articl...原创 2020-04-03 00:01:52 · 1541 阅读 · 0 评论 -
通用树抽象父类——Tree、TreeNode
目录树的基本概念TreeTreeNode树的基本概念 树的定义: 树是一种非线性的数据结构 树是由 n(n >= 0)个结点组成的有限集合,若 n = 0,则称之为空树 树中(n > 0)的首结点,称为根节点,根节点只有直接后继,没有直接前驱 除根以外的其它结点划分为m (m >= 0)个互不相交的有限集合T0 , T1, …,Tm-1, 每...原创 2020-04-02 14:50:23 · 5843 阅读 · 0 评论 -
Sort排序类-2 希尔、归并、快速&小结
目录希尔排序归并排序快速排序小结希尔排序 希尔排序的基本思想: 如果一个序列基本有序,那么插入排序会很高效 将待排序列划分为若干组,在每一组内进行插入排序,使得子序基本有序 再对整个序列进行插入排序 希尔排序示例: 例如:将n个数据元素分成d个子序列: { R[1] , R[1+d] , R[1+2d] , … , R[1+kd]} {...原创 2020-03-26 15:15:39 · 185 阅读 · 0 评论 -
Sort 排序类-1 基本排序
目录排序的一些概念选择排序插入排序冒泡排序排序的一些概念 排序的稳定性: 如果在序列中有两个数据元素 r[i] 和 r[j],它们的关键字 k[i]== k[j],且在排序之前,对象 r[i] 排在 r[j] 前面; 如果在排序之后,对象 r[i]仍在对象 r[j] 的前面,则称这个排序方法是稳定的,否则称这个排序方法是不稳定的。 稳定性排序示例 排序的重要指标:...原创 2020-03-26 12:24:31 · 583 阅读 · 0 评论 -
String类的实现与KMP算法简述
目录String的概念String.hString.cppKMP算法原理KMP.hString的概念 String: 因为C++兼容C,所以我们的字符串类也要,不仅String可以使用,还要兼容Char* 通过C语言中的函数实现String类,这样才可以实现兼容不同版本的C++编译器 实现String类时,需要考虑字符串的const属性,函数参数是否为const ...原创 2020-03-14 22:03:51 · 369 阅读 · 0 评论 -
Stack 与 Queue互相转换
文章目录Stack、QueueStack->QueueQueue->StackStack、Queue 栈:后进先出,只可插入或取出栈顶元素 队列:先进先出,只可取出队首元素,插入队尾元素 栈和队列的实现很相似,两种数据结构是否可以互相转换? 答案是肯定的,栈与队列相互转换可以加深栈与队列的理解Stack->Queue 用栈实现队列—>用后进先...原创 2020-03-12 12:50:26 · 524 阅读 · 0 评论 -
Queue、StaticQueue、LinkQueue
目录队列的知识点QueueStaticQueueLinkQueue队列的知识点 队列的特点: 队列只能操纵队头队尾元素 数据先进先出,(数据在队尾插入,从队头取出) 队列的先进先出 队列的继承结构QueueQueue.h#ifndef __Queue_H_#define __Queue_H_#include "Object.h"namespace...原创 2020-03-12 12:01:41 · 229 阅读 · 0 评论 -
Stack、StaticStack、LinkStack
目录知识点StackStaticStackLinkStack知识点 栈的特点: 栈只能操作栈顶,除栈顶外的元素都不可以操纵 数据后进先出,数据始终插入在栈顶,移除也只能先移除栈顶 栈的后进先出 栈的继承结构StackStack.h#ifndef __Stack_H_#define __Stack_H_#include "Object.h"namesp...原创 2020-03-12 10:58:21 · 257 阅读 · 0 评论 -
offsetof、container_of、LinuxList
文章目录offsetof、container_ofLinuxListoffsetof、container_of功能介绍及使用注意事项:/*功能:计算TYPE类中MEMBER成员的偏移量*/#ifndef offsetof#define offsetof(TYPE, MEMBER) ((unsigned int) &((TYPE *)0)->MEMBER)#endif...原创 2020-03-11 10:28:19 · 105 阅读 · 0 评论 -
Pointer、SmartPointer、SharedPointer
智能指针PointerSmartPointerSharedPointerPointer 智能指针的特点: 智能指针可以像指针一样使用(重载->和*) 智能指针生命周期结束自动释放内存空间 智能指针只能指向堆空间中的内存 禁止使用Delete释放智能指针指向的对象 SmartPointer的特点: 一片堆空间只可以属于一个智能指针对象 ...原创 2020-03-11 09:40:39 · 231 阅读 · 0 评论 -
链表(下) DualLinkList、DualCircleList
目录DualLinkListDualCircleListDualLinkList 双向链表的由来:单链表只可以向后访问,如果要逆序访问,效率将会很低 双向链表的特点: 比单链表多了前驱,可以逆序访问 提供游标与步长,使用方式与单链表相同 DualLinkList.h#ifndef _DualLinkList_H_#define _DualLinkList_H...原创 2020-03-10 13:38:38 · 191 阅读 · 0 评论 -
链表(上)LinkList、StaticLinkList、CircleList
目录线性表的链式存储结构LinkListStaticLinkListCircleListDualLinkListDualCircleList线性表的链式存储结构 顺序表:基于顺序存储结构的线性表 链表:基于链式存储结构的线性表 顺序表与链表的差异: 时间复杂度: 对于内置基础类型,顺序表和单链表的效率不相上下 对于自定义类类型,顺序表在效率上低于单链...原创 2020-03-10 12:11:43 · 231 阅读 · 0 评论 -
Array、StaticArray、DynamicArray
目录Array类的特点Array的实现StaticArray的实现DynamicArray的实现Array类的特点 Array类的特点: -数组类包含数组长度信息,能够发现参数是否越界(扔异常) -重载[],使得可以像原生数组一样使用 -定义为抽象父类,使用指针完成数组的基本功能 -指针指向的存储空间的大小与位置由子类提供数组类的继承结构Array的实...原创 2020-03-09 09:41:50 · 363 阅读 · 0 评论 -
List、SeqLList、StaticList、DynamicList
目录线性表的本质和操作线性表抽象父类的实现SeqList(线性表的顺序存储与抽象实现)StaticList(静态顺序表)DynamicList(动态线性表)线性表的本质和操作 线性表的表现形式: -零个或多个元素的组成的集合 -数据元素在位置上有序排列 -数据元素的数量有限且类型相同 -将元素插入线性表 线性表的分类: 只有前驱;只有后继;既有前驱...原创 2020-03-09 09:08:49 · 264 阅读 · 0 评论 -
顶层父类Object
因为编译器差异,使得同样的代码,可能表现不同的行为,这种现象是不期望的,So 创建顶层父类,将可能表现不同行为的代码,加以避免,提高代码的可移植性new在不同编译器的行为不同,当申请失败时,可能会返回NULL,也可能扔出异常解决方案:重载new,使用C库的malloc实现,如果失败,只返回NULL,不抛异常 相应的delete也需要重载(用free实现)便捷操作,所有子类都可继...原创 2020-02-25 12:07:36 · 170 阅读 · 0 评论 -
构建异常类族
异常类知识点:异常类的类型可以是自定义类型对于类类型异常的匹配依旧是从上而下严格匹配赋值兼容性原则在异常匹配中依然适用一般而言,异常匹配中,子类异常放于catch上部,父类在下部创建异常子类是为了可以抛出不同的异常来提示人们,是什么原因导致的异常类族成员及功能:异常类功能定义Exception顶层抽象父类ArithmeticException计算异...原创 2020-02-25 11:28:09 · 203 阅读 · 0 评论 -
C++数据结构之旅
数据结构实战1、开始新的学习之旅创建可复用的数据结构软件库,使用的技术: - C++面向对象技术 - C++模板技术 - C++异常处理技术原创 2020-02-25 10:11:14 · 85 阅读 · 0 评论