
数据结构笔记
pink_pink.
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
课堂笔记:插入类排序
插入排序的主要操作是插入其基本思想是: 每次将一个待排序的记录按其关键码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序为止。插入类排序方法有以下两种: 1、直接插入排序 2、希尔排序直接插入排序基本思想:在插入第 i(i>1)个记录时,前面的 i-1个记录已经排好序。需解决的关键问题?(1)如何构造初始的有序序列?(2)如何查找待插入记录的插入位置?直接插入排序过程示例...原创 2020-02-21 23:09:47 · 187 阅读 · 0 评论 -
课堂笔记:排序的基本概念
排序:给定一组记录的集合{r1, r2, ……, rn},其相应的关键码分别为{k1, k2, ……, kn},排序是将这些记录排列成顺序为{rs1, rs2, ……, rsn}的一个序列,使得相应的关键码满足ks1≤ks2≤……≤ksn(称为升序)或ks1≥ks2≥……≥ksn(称为降序)。正序:待排序序列中的记录已按关键码排好序。逆序(反序):待排序序列中记录的排列顺序与排好序的顺序正好相...原创 2020-02-17 20:52:59 · 468 阅读 · 0 评论 -
课堂笔记:散列表的查找技术
散列函数的构造:直接定址法、除留余数法、数字分析法、平方取中法、折叠法(分段叠加法)冲突处理方法:开放定址法、链地址法、建立公共溢出区概 述散列的基本思想:在记录的存储地址和它的关键码之间建立一个确定的对应关系。这样,不经过比较,一次读取就能得到所查元素的查找方法。散列表:采用散列技术将记录存储在一块连续的存储空间中,这块连续的存储空间称为散列表。散列函数:将关键码映射为散列表中适当存储...原创 2020-02-15 22:47:50 · 895 阅读 · 0 评论 -
课堂笔记:树表的查找技术:平衡二叉树(AVL树)
平衡二叉树:或者是一棵空的二叉排序树,或者是具有下列性质的二叉排序树:⑴ 根结点的左子树和右子树的深度最多相差1;⑵ 根结点的左子树和右子树也都是平衡二叉树。...原创 2020-02-12 19:45:30 · 150 阅读 · 0 评论 -
课堂笔记:树表的查找技术:二叉排序树(BST)
线性表查找是静态的查找,要在线性表上进行动态查找,存在以下的问题:无序顺序表上进行动态查找,插入操作简单,但查找的复杂性高有序顺序表上进行动态查找,查找的时间复杂性好,但是插入操作时间复杂性高单链表上进行动态查找,插入操作简单,但查找操作复杂性高解决办法: 采用二叉树这种数据结构,实现动态查找二叉排序树(Binary Search Tree)二叉排序树(也称二叉查找树):或者是一棵空的...原创 2019-12-03 00:10:27 · 408 阅读 · 0 评论 -
课堂笔记:线性表的查找技术
顺序查找:普通的顺序查找方法、带监视哨的顺序查找方法折半查找:折半查找的判定树#include using namespace std; const int MaxSize = 100; class LineSearch{ public: LineSearch(int a[], int n); ~LineSearch() {} int SeqSearch(int k)...原创 2019-12-02 23:07:20 · 200 阅读 · 0 评论 -
课堂笔记:查找的基本概念
查找的基本概念列表:由同一类型的数据元素组成的集合。关键码:数据元素中的某个数据项,可以标识列表中的一个或一组数据元素。键值:关键码的值。主关键码:可以唯一地标识一个记录的关键码。次关键码:不能唯一地标识一个记录的关键码。查找 :在具有相同类型的记录构成的集合中找出满足给定条件的记录。查找的结果 :若在查找集合中找到了与给定值相匹配的记录,则称查找成功;否则,称查找失败。静态查找 ...原创 2019-12-02 21:55:49 · 205 阅读 · 0 评论 -
课堂笔记:有向无环图及其应用、图的连通性
AOV网AOV网:在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,称这样的有向图为顶点表示活动的网,简称AOV网。AOV网与拓扑排序AOV网特点:1.AOV网中的弧表示活动之间存在的某种制约关系。2.AOV网中不能出现回路 。拓扑排序拓扑序列: 设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列v1, v2, …, vn称为一个拓扑序列,当且仅当满足下列...原创 2019-12-02 21:17:23 · 1058 阅读 · 0 评论 -
课堂笔记:最短路径
在非网图中,最短路径是指两顶点之间经历的边数最少的路径。在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径。单源点到其他顶点的最短路径:Dijkstra方法,O(n2)任意一对顶点之间的最短路径:Floyed方法,O(n3)单源点最短路径问题问题描述:给定带权有向图G=(V, E)和源点v∈V,求从v到G中其余各顶点的最短路径。应用实例——计算机网络传输的问题:怎样找到一种最...原创 2019-12-01 16:23:18 · 529 阅读 · 0 评论 -
课堂笔记:最小生成树
最小生成树(minimal spanning tree)生成树的代价:设G=(V,E)是一个无向连通网,生成树上各边的权值之和称为该生成树的代价。最小生成树:在图G所有生成树中,代价最小的生成树称为最小生成树。MST( minimum spanning tree)性质假设G=(V, E)是一个无向连通网,U是顶点集V的一个非空子集。若(u, v)是一条具有最小权值的边,其中u∈U,v∈V-...原创 2019-11-30 01:37:48 · 396 阅读 · 0 评论 -
课堂笔记:图的存储结构及实现
邻接矩阵(数组表示法)基本思想: 用一个一维数组存储图中顶点的信息,用一个二维数组(称为邻接矩阵)存储图中各顶点之间的邻接关系。无向图的邻接矩阵无向图的邻接矩阵的特点:主对角线为0且一定是对称矩阵。如何求顶点i的度:邻接矩阵的第i行(或第i列)非零元素的个数。如何判断顶点 i 和 j 之间是否存在边:测试邻接矩阵中相应位置的元素arc[i][j]是否为1。如何求顶点 i 的所有邻接点:...原创 2019-11-28 00:16:47 · 529 阅读 · 0 评论 -
课堂笔记:图的逻辑结构
图的定义图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G=(V,E),其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。在线性表中,元素个数可以为零,称为空表; 在树中,结点个数可以为零,称为空树; 在图中,顶点个数不能为零,但可以没有边。若顶点vi和vj之间的边没有方向,则称这条边为无向边,表示为(v...原创 2019-11-26 01:11:15 · 590 阅读 · 0 评论 -
课堂笔记:树、森林与二叉树的转换、哈夫曼树
树、森林与二叉树的转换树转换为二叉树:1、兄弟加线;2、保留双亲与第一孩子连线,删去与其他孩子的连线;3、顺时针转动,使之层次分明。树的前序遍历等价于二叉树的前序遍历,树的后序遍历等价于二叉树的中序遍历。森林转换为二叉树:⑴ 将森林中的每棵树转换成二叉树;⑵ 从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树根结点的右孩子,当所有二叉树连起来后,此时所得到的二叉树就是由...原创 2019-11-24 16:41:04 · 474 阅读 · 0 评论 -
课堂笔记:二叉树算法设计练习
遍历二叉树是二叉树各种操作的基础, 遍历算法中对每个结点的访问操作可以是多种形式及多个操作, 根据遍历算法的框架,适当修改访问操作的内容,可以派生出很多关于二叉树的应用算法。设计算法求二叉树的结点个数。void Count(BiNode *root){ if (root) { Count(root->lchild); number+ +; /...原创 2019-11-19 01:10:55 · 278 阅读 · 0 评论 -
课堂笔记:二叉树的逻辑结构
二叉树的定义二叉树是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。二叉树的特点:1、每个结点最多有两棵子树;2、二叉树是有序的,其次序不能任意颠倒。注意:二叉树和树是两种树结构。二叉树的基本形态:空二叉树、只有一个根结点、根结点只有右子树、根结点只有左子树、根结点同时有左右子树。特殊的二叉...原创 2019-11-14 00:28:57 · 695 阅读 · 0 评论 -
课堂笔记:二叉树的存储结构及实现
顺序存储结构二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置(下标)应能体现结点之间的逻辑关系——父子关系。...原创 2019-11-17 18:16:19 · 533 阅读 · 0 评论 -
课堂笔记:树的逻辑结构、树的存储结构
树的逻辑结构树的定义树:n(n≥0)个结点的有限集合。当n=0时,称为空树;任意一棵非空树满足以下条件:⑴有且仅有一个特定的称为根的结点;⑵当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为这个根结点的子树。树的定义是采用递归方法树的基本术语结点的度:结点所拥有的子树的个数。树的度:树中各结点度的...原创 2019-11-11 21:12:57 · 2110 阅读 · 0 评论 -
课堂笔记:多维数组、矩阵的压缩存储、广义表
线性表——具有相同类型的数据元素的有限序列。将元素的类型进行扩充:(多维)数组——线性表中的数据元素可以是线性表,但所有元素的类型相同。广义表——线性表中的数据元素可以是线性表,且元素的类型可以不相同。数组的定义:数组是由一组类型相同的数据元素构成的有序集合,每个元素受n(n≥1)个线性关系的约束,并称该数组为 n 维数组。数组的特点:元素本身可以具有某种结构,属于同一数据类型;数组是一...原创 2019-11-05 00:05:41 · 415 阅读 · 0 评论 -
课堂笔记:字符串存储、模式匹配
串的逻辑结构串:零个或多个字符组成的有限序列。串长度:串中所包含的字符个数。空串:长度为0的串,记为:" “。非空串通常记为:S=” s1 s2 …… sn " 其中:S是串名,双引号是定界符,双引号引起来的部分是串值 ,si(1≤i≤n)是一个任意字符。子串:串中任意个连续的字符组成的子序列。主串:包含子串的串。子串的位置:子串的第一个字符在主串中的序号。串的存储结构顺序串:用...原创 2019-10-28 21:05:08 · 264 阅读 · 0 评论 -
课堂笔记:栈和队列
栈的逻辑结构栈:限定仅在表尾进行插入和删除操作的线性表。空栈:不含任何数据元素的栈。允许插入和删除的一端称为栈顶,另一端称为栈底。栈的操作特性:后进先出。注意:栈只是对表插入和删除操作的位置进行了限制,并没有限定插入和删除操作进行的时间。栈的顺序存储结构及实现利用数组实现栈的顺序存储,确定用数组的哪一端表示栈底,附设指针top指示栈顶元素在数组中的位置。进栈:top加1,出栈:to...原创 2019-10-16 00:14:43 · 281 阅读 · 0 评论 -
课堂笔记:循环链表、双向链表、静态链表
循环链表:将单链表或者双链表的头尾结点链接起来,就是一个循环链表。从循环表中任一结点出发,都能访问到表中其他结点。特点:1、首尾相接的链表。2、可以从任一节点出发,访问链表中的所有节点。3、判断循环链表中尾结点的特点:q->next==first空表的构造:template<class T>CycleLinkList<T>:: CycleLinkList( )...原创 2019-10-04 23:23:45 · 430 阅读 · 0 评论 -
课堂笔记:顺序表、单链表
线性表( Linear List )的定义是零个或多个具有相同类型的数据元素的有限序列。数据元素的个数定义为线性表的 长度 。长度等于零时称为空表,一个非空表通常记为 L = ( a 1 , a 2 ,……, a n ) 其中, a i ( 1 ≤ i ≤ n )称为数据元素,下标 i 表示该元素在线性表中的位置或序号, 称元素 a i 位于表的第 i 个位置,或称 a i 是表中的第 i 个元素...原创 2019-09-23 23:18:40 · 201 阅读 · 0 评论 -
课堂笔记:算法的基本概念
算法是对特定问题求解步骤的一种描述,是指令的有限序列。算法的特性:1、有穷性:一个算法必须能在执行有穷步之后结束,且每一步都可在有穷时间内完成。2、确定性:算法中每一条指令必须有确切的含义,不具有二义性。3、可行性:算法中描述的操作都可通过已经实现的基本运算执行有限次来实现。算法有零个或多个输入(即算法可以没有输入),但是算法必须要有输出,而且输出与输入之间有着某种特定的关系。算法的描...原创 2019-09-17 21:51:20 · 804 阅读 · 0 评论