自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(135)
  • 收藏
  • 关注

转载 GUI程序原理分析

1,Qt 是一套跨平台的程序设计库,这套程序设计库主要用于 GUI 方面的程序设计开发,所以本系列博文主要是利用C++介绍 GUI 程序设计技术;2,命令行应用程序: 1,命令行应用程序的特点(Command Line Interface): 1,是一种基于顺序执行结构的可执行程序; 1,有一个固定的开始、固定的结束;...

2019-05-26 22:14:00 361

转载 图——图的Floyd法最短路径实现

1,Dijkstra 算法一次性求得起始顶点到所有其它顶点的最短路径,如果想要求解任意两个顶点之间的最短路径,可将图中顶点作为起始顶点执行 n 次 Dijkstra 算法就可以了;2,可能解决方案: 1,算法执行结束后,i 到 j 最短路径值存储于 dist[i][j] 中。最短路径前驱结点存储于 path[N][N] 中; 2...

2019-05-26 17:14:00 212

转载 图——图的Dijkstra法最短路径实现

1,最短路径的概念: 1,从有向图中某一顶点(起始顶点)到达另一顶点(终止顶点)的路径中,其权值之和最小的路径;2,问题的提法: 1,给定一个带权有向图 G 与起始顶点 v,求从 v 到 G 中其它顶点的最短路径(每条边上都存在有意义的权值); 2,Dijkstra 算法核心是通过已知最短路径寻找未知最短路径;...

2019-05-26 17:04:00 266

转载 图——图的Kruskal法最小生成树实现

1,最小生成树的特征: 1,选取的边是图中权值较小的边; 2,所有边连接后不构成回路;2,prim 算法是以顶点为核心的,最下生成树最大的特征是边,但 prim 算法非要以顶点为核心来进行,有些复杂和难以理解;3,既然最小生成树关心的是如何选择 n - 1 条边,那么是否可以直接以边为核心进行算法设计?4,简单...

2019-05-26 16:55:00 207

转载 图——图的Prim法最小生成树实现

1,运营商的挑战: 1,在下图标出的城市间架设一条通信线路; 2,要求: 1,任意两个城市间都能够通信; 2,将架设成本降至最低;2,问题抽象: 1,如何在图中选择 n - 1 条边使得 n 个顶点间两两可达,并且这 n - 1 条边的权值之和最小?...

2019-05-26 16:45:00 203

转载 图——图的深度优先遍历

1,深度优先(DFS): 1,先选择一条边走,有多条边后,再选择一条走,直到无边可走,回退; 2,再选择另一条边走; 3,特点:只要在当前的顶点上面可以有边走到其它顶点,就深入的走下去;2,深度优先算法: 1,原料:class LinkStack<T>; 2,步骤:...

2019-05-26 16:28:00 368

转载 图——图的广度优先遍历

1,前面两篇博文实现了邻接矩阵和邻接链表法实现图的数据结构,什么情况下选择合适的图的类型?从时间复杂度角度来对比下;2,时间复杂度的对比分析: 1,邻接矩阵法操作性能更好、效率更高,更在意性能,则选择邻接矩阵法; 2,链表矩阵法在空间使用率上更好,当环境资源紧张、内存比较小,选择邻接链表法;3,小结论: ...

2019-05-26 16:20:00 268

转载 图——图的邻接链表存储结构

1,邻接矩阵法中的残留问题: 1,MatrixGraph 无法动态添加/删除顶点; 2,空间使用率低;2,改进基本思想: 1,为了进一步提高空间效率,可以考虑使用链表替换数组,将邻接矩阵变换为邻接链表; 2,占用空间就是因为邻接矩阵的问题,没有连接也要占用四个字节的空间,可以考虑无连接...

2019-05-26 16:12:00 693

转载 图——图的邻接矩阵存储结构

1,基本思想: 1,用一维数组存储顶点:描述顶点相关的数据; 2,用二维数组存储边:描述顶点间的关系和权;2,邻接矩阵法(二维数组存储权值表示边): 1,设图 A = (V, E) 是一个有 n 个顶点的图,图的邻接矩阵为 Edge[n][n],则: 2,解决工程问题时,习惯于对图中的每个顶点进行...

2019-05-26 15:50:00 793

转载 图——图的定义与操作

1,树中结点可以有多个后继,而每个结点都只有一个直接前驱,因此形成了一种层次结构;如果树中的每个结点也可以有多个直接前驱,那么这种层次结构都被破坏了;这样就会形成网状结构,会是一种新的数据结构,图;2,图的定义: 1,图是由顶点集合(Vertex)及顶点间的关系集合(Edge)组成的一种数据结构Graph = (V, E),其中,V = {x | x 属于数...

2019-05-26 15:37:00 106

转载 树——二叉树的线索化

1,什么是线索化二叉树? 1,将二叉树转换为双向链表的过程(非线性 ==> 线性); 1,实际工程开发中,很大一部分情况下,二叉树一旦建立之后,就不会轻易改动,一般的用于遍历,并且这种操作一般执行很多; 2,先中后序遍历都是递归完成的,实际工程开发中,对一棵已经建立的二叉树反复执行先序遍历,效率低,所以不推...

2019-05-26 15:14:00 295

转载 树——二叉树的克隆、比较和相加

1,二叉树的克隆操作: 1,SharedPointer< BTree<T> > clone() const: 1,克隆当前树的一份拷贝; 2,返回值为堆空间中的一棵新二叉树(与当前树相等): 1,保存数据元素,树的属性一模一样;...

2019-05-26 15:03:00 211

转载 树——二叉树的先序、中序和后序遍历

1,二叉树是否只有一种遍历方式(层次遍历)?2,典型的二叉树的遍历方式: 1,先序遍历(Pre-Order Traversal); 2,中序遍历(In-Order Traversal); 3,后序遍历(Post-Order Traversal);3,先序遍历(“先序”指最先访问根结点中的数据元素):  1,二...

2019-05-26 14:52:00 582

转载 树——二叉树的层次遍历

1,二叉树的遍历: 1,二叉树的遍历(Traversing Binary Tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次; 1,层次就是访问的次序,层次遍历是先访问第一层、再第二层等;2,考虑的问题: 1,通用树结构的层次遍历算法是否可以用在二叉树结构上?如...

2019-05-26 14:34:00 168

转载 树——二叉树结点数目、高度和度数的实现

1,二叉树中结点的数目的实现: 1,定义功能:count(node): 1,在 node 为根结点的二叉树中统计结点数目; 2,功能函数代码实现:1    /* 定义数结点数目的功能函数 */2 int count(BTreeNode<T>* node) const3 {4 ...

2019-05-26 11:36:00 408

转载 树——二叉树结点的删除与清除

1,删除的方式: 1,基于数据元素值的删除: 1,SharedPointer< Tree<T> > remove(const T& value) 1,删除的是那个以结点为根结点的子树,所以返回值是一个指向树的指针; 2,希望...

2019-05-26 11:25:00 1214

转载 树——二叉树结点的插入

1,需要考虑的问题: 1,是否能够在二叉树任意结点处插入子结点? 1,不能,二叉树每个结点的成员是相对固定的,只有两个指向左右后继结点的指针成员; 2,是否需要指定新数据元素(新结点)的插入位置? 1,需要; 2,插入新结点(或数据元素)作为叶结点孩子,具体插入左边还...

2019-05-26 11:18:00 2785

转载 树——二叉树结点的查找

1,查找方式: 1,基于数据元素值的查找: 1,BTreeNode<T>* find(const T& value) const 2,基于结点的查找: 1,BTreeNode<T>* find(TreeNode<T>* node) const...

2019-05-26 11:09:00 1427

转载 树——二叉树的存储结构与结点实现

1,本文目标: 1,完成二叉树结点的存储结构设计;2,设计要点: 1,BTree 为二叉树结构,每个结点最多只有两个后继结点; 2,BTreeNode 只包含 4 个固定的共有成员; 1,一个数据成员,两个指向后继结点的指针成员,指向父结点的指针成员;...

2019-05-26 11:01:00 157

转载 树——二叉树的深层特性

1,通过孩子兄弟模型,可以表示普通的树,又通过对孩子兄弟模型的抽象,得到了新的二叉树的概念;2,性质 1: 1,在二叉树的第 i 层最多有 2冥(i-1) 个结点(i >= 2): 性质 2:   1,高度为 k 的二叉树最多有 2冥(k) - 1 个结点(k >= 0); 性质 3:   1,对任何一棵二叉树,如果其...

2019-05-26 10:55:00 68

转载 树——通用树到二叉树的转换

1,已经创建了通用树结构,有必要创建另一种树结构吗?2,简化树就直接减少结点中孩子的数量,但是这样树还能通用吗?3,通用树结构的回顾: 1,双亲孩子表示法: 1,每个结点都有一个指向双亲的指针; 2,每个结点都有若干个指向其孩子的指针;4,另一...

2019-05-26 10:52:00 312

转载 树——通用树的层次遍历

1,为何及如何按层次遍历通用树中的每一个数据元素? 1,通用树结构是一种容器类型的树结构,其用来装数据元素,所以应该提供一种方法来遍历树中的每一个数据结构; 2,往下分析;2,当前的事实: 1,树是非线性的数据结构,树的结点没有固定的编号方式; 1,也就不能像链表一样统一编号来访问;...

2019-05-26 10:50:00 316

转载 树——通用树结点数目、高度和度数的实现

1,树中的属性操作有: 1,树中结点的数目,树中高度,树的度数;2,树中结点数目: 1,定义功能:count(node) 1,在 node 为根结点的树中统计结点数目; 2,递归实现;  2,功能函数代码实现: 1 /* 求以 node 为根结点所代...

2019-05-26 10:36:00 309

转载 树——通用树结点的删除

1,本文实现通用树结构结点的删除操作;2,删除的方式(和插入操作互逆): 1,基于数据元素值的删除: 1,SharedPointer< Tree<T> > remove(const T& value) 1,返回指向一棵树的智能指针; 2,基于...

2019-05-26 10:26:00 207

转载 树——通用树结点的清除

1,树是一种数据结构,用来存储容器,因此它可以用来看做一种容器类型;既可以向容器中插入东西,也可以将容器中的东西倒出来;2,清除操作的定义: 1,void clear(): 1,将树中的所有结点清除(释放堆中的结点);3,树中数据元素的清除: 1,递归清除;...

2019-05-26 10:19:00 186

转载 树——通用树结点的插入

1,通用树中的插入操作是以查找操作为基础的;2,插入的方式: 1,插入新结点: 1,bool insert(TreeNode<T>* node) 2,插入数据元素: 1,bool insert(const T& value, TreeNode<T>* pa...

2019-05-26 10:07:00 310

转载 树——通用树结点的查找

1,查找的方式(都返回指向结点的指针): 1,基于数据元素值的查找: 1,GTreeNode<T>* find(const T& value) const 1,const 表示当前的成员函数不会修改对象的状态,也就是成员变量的值; 2,基于结点的查找:...

2019-05-26 10:00:00 381

转载 树——通用树的存储结构与结点实现

1,上篇博文介绍了树的定义和相关概念定义,本节课创建树对象和树结点对象;2,课程目标: 1,完成树和结点的存储结构设计: 1,没有树结点,就没有树,同生死;3,设计要点: 1,GTree 为通用树结构,每个结点可以存在多个后继结点; 2,GTree...

2019-05-25 23:02:00 101

转载 树——树的定义与操作

1,数据结构里面的非线性结构; 1,树;2,树是一种非线性的数据结构;3,树是由 n(n >= 0) 个结点组成的有限集合: 1,如果 n = 0,称为空树; 2,如果 n > 0,则: 1,有一个特定的称之为根(root)的结点; 2,根...

2019-05-25 22:50:00 186

转载 排序——排序的工程应用示例

1,排序类(Sort)与数组类(Array)的关系: 1,Sort 除了可以排序 C 中的原生数组类外,还要应该可以排序 Array 里面的数组类; 2,本文第一小部分改写 Array 使之满足; 3,新增的成员函数:2,增加数组类在排序中应用的成员函数(仅 *.cpp 文件): 1    /* 以下六个重载...

2019-05-25 21:37:00 131

转载 排序——归并排序和快速排序

1,归并排序的基本思想: 1,将两个或两个以上的有序序列合并成一个新的有序序列,比如有序序列v[0] ... v[m] 和 v[m+1] ... v[n-1] 合并为 v[0] ... v[n-1],这种归并方法称为 2 路归并; 1,必须大于 1 个有序序列; 2,必须有序;...

2019-05-25 21:26:00 108

转载 排序——冒泡排序和希尔排序

1,冒泡排序的基本思想: 1,每次从后向前进行(假设为第 i 次),j = n - 1, n - 2, ..., i,两两比较 v[j-1] 和 v[j] 的关键字;如果发生逆序,则交换 v[j-1] 和 v[j]; 1,水低泡泡,因为轻,从水底冒出来;2,第 i 次冒泡排序示例及元素排序示例: 1,冒泡排序每...

2019-05-25 21:16:00 464

转载 排序——选择排序和插入排序

1,选择排序的基本思想: 1,每次(例如第 i 次,i = 0, 1, ..., n-2)从后面 n - i 个待排的数据元素中选出关键字最小的元素,作为有序元素序列第 i 个元素; 2,第 i 次选择排序示例及元素排序示例:3,选择排序 Sort::Seletc 的实现(仅 *.cpp 文件): 1 /* 选择排序...

2019-05-25 21:05:00 552

转载 排序——排序的基本概念

1,排序的一般定义: 1,排序是计算机内经常进行的一种操作,其目的是将一组“无序”的数据元素调整为“有序”的数据元素; 2,无序到有序就是排序;2,排序的数学定义: 1,假设含 n 个数据元素序列为{R1, R2, ..., Rn},其相应的关键字序列为{K1, K2, ..., Kn},这些关键字相互之间可以进行比...

2019-05-25 20:56:00 1769

转载 字符串类——KMP算法的应用

1,字符串类中的新功能(本文代码已集成到字符串类——字符串类的创建(上)中,这里讲述函数实现原理):2,子串查找(KMP 算法直接运用): 1,int indexOf(const char* s) const; 2,int indexOf(const String& s) const; 3,子串查找成员函数...

2019-05-25 20:14:00 95

转载 字符串类——KMP子串查找算法

1, 如何在目标字符串 s 中,查找是否存在子串 p(本文代码已集成到字符串类——字符串类的创建(上)中,这里讲述KMP实现原理) ? 1,朴素算法:   2,朴素解法的问题: 1,问题:有时候右移一位是没有意义的; 2,K...

2019-05-25 20:01:00 303

转载 字符串类——字符串类的创建(下)

1,上篇博文中的 String 创建功能很弱,不能满足开发的需要,本文为这个字符串类开发一系列函数(函数代码已经集成到“字符串类——字符串类的创建(上)”一文中,本节讲述实现原理),使其能够胜任一系列工程开发的需要; 2,字符串类中的常用成员函数:3,重载数组访问操作符 []: 1,char& operator [] (int...

2019-05-25 19:49:00 243

转载 字符串类——字符串类的创建(上)

1,历史遗留问题: 1,C 语言不支持真正意义上的字符串; 2,C 语言用字符数组和一组函数实现字符串操作; 1,字符数组模拟字符串; 2,字符数组以 \0 来结束就是合法字符串; 3,C 语言中没有单独类型支持字符串,要么是字符数组,要么是 char* 指针;...

2019-05-25 17:51:00 409

转载 数据结构库——链式队列的实现

1,StaticQueue 的对象在创建的时候,对于数据元素为类类型时,会多次调用元素类型的构造函数,影响效率,所以要实现链式队列;2,队列的链式存储实现:3,链式队列的设计要点: 1,类模板,抽象父类 Queue 的直接子类; 2,在内部使用链式结构实现元素的存储; 3,只在链表的头部和尾部进行操作...

2019-05-25 17:22:00 102

转载 数据结构库——顺序队列的实现

1,队列本质: 1,队列是一种特殊的线性表(对比前面的栈); 2,队列仅能在线性表的两端进行操作(生活中的排队): 1,队头(Font):取出数据元素的一端; 2,队尾(Rear):插入数据元素的一端;2,队列特性(唯一特性): 1,先进先...

2019-05-25 17:15:00 190

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除