数据结构实战开发【笔记】
文章平均质量分 89
该系列内容为狄泰软件学院唐老师课程笔记,记录下来以备自己随时查阅
洋葱汪
大一下学期啦,学的东西越来越多,觉得有必要做些笔记
-2018-3-15
展开
-
图的遍历(BFS、DFS)
前文使用邻接矩阵法和邻接链表法实现了图结构(MatrixGraph 、ListGraph),本节使用两种算法进行图的遍历目录1、定义与概括2、广度优先搜索算法3、深度优先搜索算法4、小结1、定义与概括图的遍历:从图中的某一顶点出发,沿着一些边访问图中的其它顶点,使得每个顶点最多被访问一次 注意:从某个顶点出发进行遍历,不一定能够访问到图中的所有顶点...原创 2018-06-07 17:33:26 · 883 阅读 · 0 评论 -
图的定义与存储结构(邻接矩阵、邻接链表)
目录1、图的定义与操作2、图的存储结构1、图的邻接矩阵结构2、图的邻接链表结构3、时间复杂度的对比分析1、图的定义与操作定义 -图是由顶点集合(Vertex)及顶点间的关系集合(Edge)组成的一种数据结构:Graph= (V, E)V = { x | x ∈ 某个数据对象 } 是顶点的...原创 2018-06-01 20:45:01 · 2207 阅读 · 0 评论 -
二叉树面试题:单度结点删除 、中序线索化二叉树
目录1、面试题一:单度结点删除2、面试题二:中序线索化二叉树1、面试题一:单度结点删除编写一个函数用于删除二叉树中的所有单度结点要求:结点删除后,其唯一的子结点替代它的位置 递归的思想这里应该考虑结点中是否包含指向父...原创 2018-06-01 17:41:30 · 463 阅读 · 0 评论 -
二叉树的克隆、比较与相加
目录1、二叉树的克隆操作2、二叉树比较操作的定义3、二叉树的相加操作1、二叉树的克隆操作二叉树的克隆操作 -SharedPointer< BTree<T> > clone() const●克隆当前树的一份拷贝●返回值为堆空间中的一棵新二叉树(与当前树相等...原创 2018-05-31 15:44:29 · 859 阅读 · 0 评论 -
二叉树的遍历方式与线索化实现
目录1、二叉树结构的层次遍历2、二叉树的典型遍历方式 (先序、中序、后序)3、二叉树的线索化实现1、二叉树结构的层次遍历二叉树的遍历 二叉树的遍历(Traversing Binay Tree)是指从根结点出发,按照某种次序 依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。通用树结...原创 2018-05-30 17:29:06 · 581 阅读 · 2 评论 -
二叉树中的结点删除,清除,属性操作
上节实现了二叉树中的结点查找、插入,这节实现二叉树中的结点删除,清除,属性操作目录1、二叉树中的结点删除2、二叉树中的结点清除3、二叉树中属性操作函数的实现1、二叉树中结点的数目2、二叉树的高度3、二叉树的度数4、编程实验1、二叉树中的结点删除删除的方式 (与通用树结构一致)-基于数据元素值的删除...原创 2018-05-29 20:30:25 · 8173 阅读 · 1 评论 -
二叉树中的结点查找、插入
前面实现了通用树结构,介绍了树到二叉树的转换,这节实现二叉树中的结点查找、插入目录1、 二叉树的存储结构设计2、二叉树中的结点查找操作3、二叉树中的结点插入操作1、 二叉树的存储结构设计目标:完成二叉树和二叉树结点的存储结构设计设计要点- BTree为二叉树结构,每个结点最多只有两个后继结点...原创 2018-05-29 10:55:33 · 9049 阅读 · 0 评论 -
树到二叉树的转换、二叉树的深层特性
上节实现了复杂的通用树结构,通用树结构中的每个结点都可以有任意多的孩子,都可以有无限形态,工程中很少使用这么复杂的树,这节理论介绍另一种树结构模型目录1、树到二叉树的转换2、二叉树的深层特性1、树到二叉树的转换通用树结构回顾-双亲孩子表示法 ●每个结点都有一个指向其双亲的指针 ●每...原创 2018-05-28 18:11:20 · 1730 阅读 · 0 评论 -
DTLib - 通用树结构的设计与实现(Tree、TreeNode、GTree、GTreeNode)
目录1、树的定义与操作1、树的定义2、树与结点抽象类的创建2、通用树的存储结构与实现1、通用树中结点的查找操作2、通用树中结点的插入操作3、通用树中结点的清除操作(工厂模式)4、树中结点的删除操作5、通用树中属性操作的实现1、树中结点的数目2、树的高度3、树的度数4、编程实验3、树形结构的层次遍历4、小结1、树的定义与操作1、树...原创 2018-05-25 12:11:33 · 1440 阅读 · 0 评论 -
DTLib - Sort
目录1、排序的基本概念2、DTLib中的排序类设计3、选择排序4、插入排序5、冒泡排序6、希尔排序7、归并排序8、快速排序9、排序的工程应用示例10、小结1、排序的基本概念排序的一般定义 排序是计算机内经常进行的—种操作,其目的是将一组“无序”的数据元素调整为“有序”的数据元素。排序的数学定义...原创 2018-05-24 17:35:14 · 576 阅读 · 0 评论 -
递归的思想与应用
目录1、递归的思想2、递归思想的应用1、递归求和2、斐波拉契数列3、求字符串长度4、单向链表的转置5、单向排序链表的合并6、汉诺塔问题7、全排列问题3、递归实现回溯算法1、回溯的本质2、逆序打印单链表中的偶数结点3、八皇后问题4、小结1、递归的思想递归是—种数学上分而自治的思想-将原...原创 2018-05-21 17:44:54 · 1390 阅读 · 0 评论 -
KMP 子串查找算法
1、KMP子串查找算法问题 如何在目标字符串S中,查找是否存在子串P?朴素解法//目标字符串S中,查找子串P的位置int sub_str_index(const char* s, const char* p){ int ret = -1; int s1 = strlen(s); int p1 = strlen...原创 2018-05-19 21:12:48 · 410 阅读 · 0 评论 -
DTLib - 字符串类的创建
目录1、历史遗留问题2、字符串类的创建3、编程实验4、字符串类中的常用成员函数实现5、KMP算法的应用6、编程实验7、小结1、历史遗留问题C语言不支持真正意义上的字符串C语言用字符数组和—组函数实现字符串操作C语言不支持自定义类型,因此无法获得字符串类型从C到C++的进化过程引入了自定义类型在C++中可以通过类完成字符串类型的定...原创 2018-05-18 21:57:14 · 658 阅读 · 2 评论 -
栈与队列的相互转换
1、问题 栈和队列在实现上非常类似, 是否可以用栈实现队列?问题分析 用栈实现队列等价于用“后进先出”的特性实现 "先进先出" 的特性! 解决方案设计 实现思路 准备两个栈用于实现队列: stack_in 和 stack_out ▪ 当有新元素入队时:将其...原创 2018-05-17 20:47:45 · 1081 阅读 · 1 评论 -
DTLib - Queue、StaticQueue、LinkQueue
目录1、队列的概念及实现2、基于顺序存储结构的队列 3、编程实验 4、基于链式存储结构的队列 5、编程实验6、编程实验 7、小结1、队列的概念及实现 队列是一种特殊的线性表 队列仅能在线性表的两端进行操作 -队头(Front) : 取出数据元素的一端 -队尾(Rear) : 插入数...原创 2018-05-16 19:01:35 · 418 阅读 · 0 评论 -
DTLib - Stack、StaticStack、LinkStack
目录1、栈的概念及实现 2、基于顺序存储结构的栈3、编程实验 3、基于链式存储结构的栈4、编程实验 5、栈的应用实践 6、编程实验7、小结 8、深度思考1、栈的概念及实现 栈的定义 -栈是一种特殊的线性表 -栈仅能在线性表的—端进行操作 ...原创 2018-05-15 21:48:12 · 385 阅读 · 0 评论 -
Linux内核链表剖析
目录1、Linux内核源码的移植2、编程实验 3、Linux内核链表剖析4、编程实验 5、小结 1、Linux内核源码的移植目标 -移植Linux内核链表,使其适用于非GNU编译器 -分析Linux内核中链表的基本实现 Linux内核链表的位置及依赖 -位置 :{linux-2.6.39}\\include\linux\li...原创 2018-05-12 22:18:16 · 354 阅读 · 0 评论 -
linux内核中的两个宏offsetof、container_of
老生常谈的两个宏(Linux)1、Linux内核中常用的两个宏定义 2、offsetof原理剖析 编译器做了什么? - offsetof用于计算TYPE结构体中MEMBER成员的偏移位置 - 编译器清楚的知道结构体成员变量的偏移位置 - 通过结构体变量首地址与偏移量定位成员变量 3、编程实验 offsetof原理剖析 ...原创 2018-05-10 21:26:12 · 372 阅读 · 0 评论 -
DTLib - CircleList、DualLinkList、DualCircleList
目录1、循环链表的实现2、编程实验3、循环链表的应用4、双向链表的实现5、编程实验6、双向循环链表的实现7、编程实验1、循环链表的实现概念上-任意数据元素都有—个前驱和—个后继-所有的数据元素的关系构成—个逻辑上的环实现上-循环链表...原创 2018-05-10 11:37:52 · 564 阅读 · 0 评论 -
DTLib - LinkList、StaticLinkList
目录线性表的链式存储结构基本概念单链表的具体实现与优化单链表的遍历与优化静态单链表的实现顺序表和单链表的对比分析线性表的链式存储结构基本概念1、基本概念链式存储的定义 为了表示每个数据元素与其直接后继元素之间的逻辑关系;数 据元素除了存储本身的信息外,还需要存储其直接后继...原创 2018-04-18 20:30:18 · 650 阅读 · 0 评论 -
DTLib - Array、StaticArray、DynamicArray
1、数组类的创建目标:完成Array,StaticArray,DynamicArray类的具体实现 需求分析:创建数组类代替原生数组的使用 - 数组类包含长度信息,能够主动发现越界访问Array设计要点 -抽象类模板,存储空间的位置和大小由子类完成 -重载数组操作符,判断访问...原创 2018-04-16 21:37:09 · 396 阅读 · 0 评论 -
DTLib - List、SeqList、StaticList、DynamicList
目录1、线性表的本质和操作2、编程实验3、线性表的顺序存储结构和抽象实现4、编程实验5、顺序存储线性表的效率分析6、StaticList 和 DynamicList7、小结1、线性表的本质和操作线性表( List )的表现形式 -零个或多个数据元素组成的集合 -数据元素在位置上是有序排...原创 2018-04-15 14:29:23 · 655 阅读 · 0 评论 -
DTLib - 顶层父类的创建
1、顶层父类的创建当代软件架构实践中的经验 -尽量使用单重继承的方式进行系统设计 -尽量保持系统中只存在单一的继承树 -尽量使用组合关系代替继承关系不幸的事实 -C++语言的灵活性使得代码中可以存在多个继承树 -C++...原创 2018-04-14 11:32:25 · 406 阅读 · 0 评论 -
DTLib - 异常类构建
1、异常类构建异常的类型可以是自定义类类型对于类类型异常的匹配依旧是至上而下严格匹配赋值兼容原则在异常匹配中依然适用一般而言 -匹配子类异常的catch放在上部 -匹配父类异常的catch放在下部现代C++库必然包含充要的异常类族,异常类是数据结构类所依赖的"基础设施"...原创 2018-04-13 23:07:47 · 612 阅读 · 1 评论 -
数据与算法
1、数据的艺术问题 如何用程序描述生活中的个体?数据的概念 程序的操作对象,用于描述客观事物数据的特点 - 可以输入到计算机 - 可以被计算机程序处理数据中的新概念 - 数据元素 组成数据的基本单位 - 数据...原创 2018-03-22 10:42:56 · 783 阅读 · 0 评论 -
DTLib - 概括
1、启航,新的目标 专业程序员的培养路线目标:创建可复用的数据结构软件库使用的技术 - C++面向对象技术 - C++模板技术 - C++异常处理技术注:该库的所有语法问题都可以在下面找到https://blog.csdn.net/qq_39654127/article/category...原创 2018-03-21 21:06:49 · 492 阅读 · 0 评论