数据结构
文章平均质量分 76
至肝主义圈毛君
Game Building
展开
-
数据结构知识整理 - 构造图(邻接表和邻接矩阵)
主要内容图的定义 图的存储结构 邻接矩阵 邻接表 对比邻接矩阵与邻接表 十字链表 邻接多重表 前言在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有明显的层次关系,并且每一层中的数据元素可能和下一层的多个元素(子结点)相关,但只能和上一层的一个元素(父结点)相关;在图结构中,结点之间的关系是任意的,可以说...原创 2018-11-25 06:20:13 · 2367 阅读 · 0 评论 -
【数据结构】递归与栈
递归递归是指,在一个函数或数据结构的定义中直接(或间接)地出现定义本身,这是一个不断深入、细化的过程。递归的思想比较巧妙,需要自己多去思考,或者多体会别人的代码。1)函数定义例如:阶乘函数,n! = n * (n-1) * ... * 1int Fact(int n){ if(n == 0) return 1; /*若n等于0,阶乘等于1*/ ...原创 2018-12-31 17:49:50 · 538 阅读 · 0 评论 -
数据结构知识整理 - 链栈
主要内容栈的定义 链栈的存储结构 链栈的各项操作初始化入栈出栈取栈顶元素 栈的定义栈和队列是两种重要的线性结构,与一般线性表不同,它们是操作受限的特殊线性表,主要用于辅助其他数据结构的操作和处理,基本不用于存储数据元素信息。栈(stack)是限定仅在表尾进行插入或删除操作的线性表,即后进先出(Last In First Out,LIFO)。因此,对栈来说,表尾...原创 2018-12-24 16:22:52 · 355 阅读 · 0 评论 -
数据结构知识整理 - 循环队列
主要内容队列的定义 循环队列的存储结构 循环队列的各项操作初始化入队出队取队头元素求队列长度 队列的定义栈和队列是两种重要的线性结构,与一般线性表不同,它们是操作受限的特殊线性表,主要用于辅助其他数据结构的操作和处理,基本不用于存储数据元素信息。队列(Queue)是一种先进先出(First In First Out,FIFO)的线性表。它只允许在表的一端插...原创 2018-12-25 13:11:26 · 477 阅读 · 0 评论 -
数据结构知识整理 - 链队
主要内容队列的定义 链队的存储结构 链队的各项操作初始化入队出队取队头元素 队列的定义栈和队列是两种重要的线性结构,与一般线性表不同,它们是操作受限的特殊线性表,主要用于辅助其他数据结构的操作和处理,基本不用于存储数据元素信息。队列(Queue)是一种先进先出(First In First Out,FIFO)的线性表。它只允许在表的一端插入,而在表的另一端删除...原创 2018-12-25 14:40:48 · 346 阅读 · 0 评论 -
【数据结构】折半插入排序
折半插入排序(Binary Insertion Sort)(可先回顾“排序算法”)插入排序的基本思想:每一趟排序中,将一个待排序记录按其关键字大小插入到“有序”记录的适当位置,直到所有待排序记录全部插入为止。直接插入排序是最简单的排序方法,它采用顺序查找表查找待排序记录在有序序列上的插入位置,而“查找”操作可利用“折半查找”来实现,以“折半查找法”查找插入位置的排序则称为折半插入排序。...原创 2018-12-31 20:02:38 · 977 阅读 · 0 评论 -
【数据结构】快速排序
快速排序(Quick Sort)(可先回顾“排序算法”)交换排序的基本思想:两两比较待排序记录的关键字,一旦发现两个记录不满足次序要求时则进行交换,直到整个序列全部满足要求为止。冒泡排序(Bubble Sort)是一种最简单的交换排序方法,它通过两两比较相邻记录的关键字,逆序则交换,从而使关键字较小的记录如气泡一般逐渐往上“漂浮”(左移),或者使关键字较大的记录如石块一般“沉落”(右移...原创 2018-12-31 20:12:54 · 365 阅读 · 0 评论 -
【数据结构】堆排序
堆排序(Heap Sort)(可先回顾“排序算法”)选择排序的基本思想:每一趟从待排序记录中选出关键字最小的记录,按顺序放在已排序的记录序列最后,直到全部记录排序好为止。堆排序是一种树形选择排序,在排序过程中,将存储待排序记录的顺序表看成是一棵完全二叉树(区别满二叉树)的顺序存储结构。利用完全二叉树中父结点与子结点的内在关系,在当前无序的序列中选择关键字最小(或最大)的记录。...原创 2018-12-31 20:15:55 · 305 阅读 · 0 评论 -
【数据结构】哈希查找(散列查找)
主要内容前提 构造散列函数数字分析法平方取中法折叠法除留余数法处理冲突开放地址法链地址法散列查找前提如果在数据元素的存储位置和其关键字之间建立某种直接关系,那么在进行查找时,就无需逐个比较关键字或者只做少数次的比较,并按照直接关系由关键字找到相应的记录,这就是散列查找法(Hash Search)的思想。它通过对元素的关键字值进行某种运算,直接求出元素的...原创 2019-01-02 18:28:24 · 1514 阅读 · 0 评论 -
【数据结构】图的定义及存储结构
前言在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继;在树形结构中,数据元素之间有明显的层次关系,并且每一层中的数据元素可能和下一层的多个元素(子结点)相关,但只能和上一层的一个元素(父结点)相关;在图结构中,结点之间的关系是任意的,可以说树形结构是特殊的图结构。图的定义图(Graph)G由两个集合V和G组成,记作G = (V,G)。其中V...原创 2019-06-12 15:49:05 · 891 阅读 · 0 评论 -
【数据结构】图的存储结构:邻接矩阵
图的存储结构由于图的任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序存储结构,但我们可以用二维数组(矩阵)来表示元素之间的关系——邻接矩阵。除此之外还有链式存储结构,包括邻接表、十字链表和邻接多重表。其中邻接矩阵和邻接表最常用。邻接矩阵邻接矩阵(Adjacency Matrix)是表示顶点之间相邻关系的矩阵,存储在二维数组中...原创 2019-06-12 15:54:25 · 1671 阅读 · 0 评论 -
【数据结构】图的存储结构:邻接表
图的存储结构由于图的任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序存储结构,但我们可以用二维数组(矩阵)来表示元素之间的关系——邻接矩阵。除此之外还有链式存储结构,包括邻接表、十字链表和邻接多重表。其中邻接矩阵和邻接表最常用。邻接表邻接表(Adjacency List)是图的一种链式结构。图中有多少个顶点,就有多少个单链表...原创 2019-06-12 15:56:04 · 3351 阅读 · 0 评论 -
【数据结构】图的存储结构:十字链表和邻接多重表
图的存储结构由于图的任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序存储结构,但我们可以用二维数组(矩阵)来表示元素之间的关系——邻接矩阵。除此之外还有链式存储结构,包括邻接表、十字链表和邻接多重表。其中邻接矩阵和邻接表最常用。十字链表十字链表(Orthogonal List)是有向图的另一种链式存储结构,可以看作是有向图的...原创 2019-06-12 16:01:48 · 1454 阅读 · 0 评论 -
【数据结构】最短路径算法 之 迪杰斯特拉算法
基本概念最简单的最短路径是求中转次数最少的路径,而不考虑每条边的权值。而在实际问题中,路径长度的度量就不再是路径上的边数,而是路径上所有边的权值之和。在有向网中,习惯上称路径的第一个顶点为源点(Source),最后一个顶点为终点(Destination)。下面主要讨论两种最常见的最短路径问题:一、从某个源点到其余顶点的最短路径;二、求每一对顶点之间的最短路径。迪杰斯特拉(D...原创 2019-06-19 00:18:42 · 1147 阅读 · 0 评论 -
【数据结构】最短路径算法 之 弗洛伊德算法
基本概念最简单的最短路径是求中转次数最少的路径,而不考虑每条边的权值。而在实际问题中,路径长度的度量就不再是路径上的边数,而是路径上所有边的权值之和。在有向网中,习惯上称路径的第一个顶点为源点(Source),最后一个顶点为终点(Destination)。下面主要讨论两种最常见的最短路径问题:一、从某个源点到其余顶点的最短路径;二、求每一对顶点之间的最短路径。迪杰斯特拉(D...原创 2019-06-19 00:20:05 · 810 阅读 · 0 评论 -
【数据结构】最小生成树 之 普利姆算法
基本概念假设要在n个城市之间建立通信联络网,则连通n个城市只需要n-1条线路。这时,自然会考虑如何在最省经费的前提下完成任务。在一个连通网的所有生成树中,各边的代价之和最小的那棵生成树称为该连通网的最小生成树。MST性质:最小生成树中必定存在一条具有最小权值的边。普利姆(Prim)算法和克鲁斯卡尔(Kruskal)算法是两个利用MST性质构成最小生成树的算法。普利姆算法的核心思想是...原创 2019-06-19 00:25:09 · 1050 阅读 · 0 评论 -
数据结构知识整理 - 顺序栈
主要内容栈的定义 顺序栈的存储结构 顺序栈的各项操作初始化入栈出栈取栈顶元素 栈的定义栈和队列是两种重要的线性结构,与一般线性表不同,它们是操作受限的特殊线性表,主要用于辅助其他数据结构的操作和处理,基本不用于存储数据元素信息。栈(stack)是限定仅在表尾进行插入或删除操作的线性表,即后进先出(Last In First Out,LIFO)。因此,对栈来说,...原创 2018-12-24 15:31:23 · 498 阅读 · 0 评论 -
【数据结构】分块查找
主要内容基本概念 分块查找(Blocking Search)基本概念在介绍查找算法前我们先重温几个重要概念:1)数据:客观事物的符号表示,是所有能输入到计算机中,并能被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑中用到的字符串,多媒体程序处理的图形、图像、声音及动画等通过特殊编码定义后的数据。2)数据元素:数据的基本单位,在计算机中通常作为一个整体进...原创 2018-12-27 19:50:00 · 2399 阅读 · 0 评论 -
【数据结构】折半查找
主要内容基本概念 折半查找(Binary Search)基本概念在介绍查找算法前我们先重温几个重要概念:1)数据:客观事物的符号表示,是所有能输入到计算机中,并能被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑中用到的字符串,多媒体程序处理的图形、图像、声音及动画等通过特殊编码定义后的数据。2)数据元素:数据的基本单位,在计算机中通常作为一个整体进行考...原创 2018-12-27 19:48:37 · 2323 阅读 · 2 评论 -
数据结构知识整理 - 遍历图 - 深度优先搜索
主要内容深度优先搜索 以邻接矩阵为存储结构的深度优先搜索遍历 以邻接表为存储结构的深度优先搜索遍历 图的遍历算法是实现图的其他算法的基础,图的遍历方式有两种:深度优先搜索遍历和广度优先搜索遍历。深度优先搜索遍历类似于树的先序遍历(根节点→左子树→右子树),借助了栈结构以实现递归;广度优先搜索遍历则类似于层次遍历,借助于队列结构实现。因为图的任意两个顶点都有可能存在联系,所以在...原创 2018-11-27 15:49:02 · 391 阅读 · 0 评论 -
【数据结构】最小生成树(普利姆算法和克鲁斯卡尔算法)
主要内容基本概念 普利姆算法(加点法) 克鲁斯卡尔算法(加边法)现实生活中的许多问题都可以转化为图来解决。例如,如何以最小成本构建一个通信网络,如何计算地图中两地之间的最短路径,如何为复杂活动中各子任务的完成寻找一个较优的顺序等。四个常用算法:最小生成树、最短路径、拓扑排序和关键路径。基本概念假设要在n个城市之间建立通信联络网,则连通n个城市只需要n-1条线路。这...原创 2018-11-30 14:14:50 · 1447 阅读 · 0 评论 -
【数据结构】排序算法
主要内容前提 初步认识排序 待排序记录表的结构定义前提排序是计算机程序设计中的一种重要操作,在很多领域中都有着广泛的应用。排序的一个主要目的是便于查找。在前两篇关于查找的博文中提到的折半查找(要求有序的顺序表)和树表查找(二叉排序树结构)都涉及到排序算法。人们设计了大量的排序算法以满足不同的需求。著名计算机科学家D.E.Knuth在他的巨著《计算机程序设计艺术》第三...原创 2018-12-14 22:18:23 · 1351 阅读 · 2 评论 -
【数据结构】顺序查找
主要内容基本概念 顺序查找(Sequential Search)基本概念在介绍查找算法前我们先重温几个重要概念:1)数据:客观事物的符号表示,是所有能输入到计算机中,并能被计算机程序处理的符号的总称。如数学计算中用到的整数和实数,文本编辑中用到的字符串,多媒体程序处理的图形、图像、声音及动画等通过特殊编码定义后的数据。2)数据元素:数据的基本单位,在计算机中通常作为一个整...原创 2018-12-07 15:44:35 · 2178 阅读 · 0 评论 -
数据结构知识整理 - 二叉排序树
主要内容前提 二叉排序树(Binary Sort Tree)数据结构查找算法插入算法创建算法删除算法 前提(可回顾“基本概念”)若在查找的同时对表做插入、删除等修改操作,则被查找的表称为动态查找表,反之则称为静态查找表。换句话说,动态查找表的表结构本身是在查找过程中动态生成的,即在创建表时,对于给定值,若表中存在其关键字等于给定值的记录,则返回“已...原创 2018-12-11 18:06:14 · 2071 阅读 · 0 评论 -
【数据结构】树、二叉树、森林(存储结构篇)
主要内容树的基本术语 二叉树(Binary Tree)性质存储结构一般树的存储结构 森林的存储结构树的基本术语1)结点:树中的一个独立单元,包括数据域(存储数据元素信息)和一个或若干个指针域(如存储直接后继位置的域)。/*-------结点的数据结构-------*/typedef int Elemtype /*设置数据(元素)的类型为整型*/ty...原创 2018-12-20 23:05:00 · 2471 阅读 · 0 评论 -
数据结构知识整理 - 遍历二叉树(递归、非递归、层次)
主要内容基本概念 三种遍历方案的思想 根据遍历序列确定二叉树 遍历的递归算法 遍历的非递归算法 层次遍历 基本概念遍历二叉树(traversing binary tree)是指按某条搜索路径访问树中的每个结点,而且每个结点仅访问一次。“访问”的含义很广,可以是对结点做各种处理,比如输出结点的数据元素信息(cout语句)、运算结点、修改结点等。遍历二叉树是二叉树最基本...原创 2018-12-22 03:51:38 · 583 阅读 · 1 评论 -
【数据结构】哈夫曼树与哈夫曼编码
主要内容基本概念 构造思路 存储结构 构造算法 哈夫曼编码的引入 求哈夫曼编码基本概念1)路径:由一个结点到另一个结点之间的所有分支共同构成。2)路径长度:结点之间的分支数目。3)树的路径长度:从树的根结点到其他所有结点的路径长度之和。4)权:赋予某一实体的值。在数据结构中,实体包括结点和边,所以对应有结点权和边权。5)结点的带权路径长度:结点与树的根结点...原创 2018-12-23 21:28:34 · 1255 阅读 · 0 评论 -
数据结构知识整理 - 链表(本篇包括单链表、循环链表以及双向链表)
主要内容链表的基本概念 链表的基本术语和存储结构 链表的基本操作 循环链表 双向链表 链表的基本概念链表的特点是:用一组任意的存储单元存储某逻辑结构的数据元素(存储单元可连续可不连续)。因此,为了表示每个数据元素与其直接后继数据元素的逻辑关系,除了要存储数据元素本身的信息外,还需要存储一个指向直接后继数据元素的指针(对于线性表而言)。这两部分信息组成数据元素的存储映像,称...原创 2018-12-21 02:05:07 · 414 阅读 · 0 评论 -
数据结构知识整理 - 建立二叉链表、复制二叉树、计算二叉树深度、统计二叉树结点数
主要内容建立二叉链表 复制二叉树 计算二叉树深度 统计二叉树的结点个数 建立二叉链表在先序遍历的递归算法中,将输出语句改为输入语句即可。(可回顾“递归算法”)需要注意的是,递归算法会遍历满二叉树中的每一个结点,所以我们必须对空结点进行判断和输入。void CreatBiTree(BiTree &T){ cin>>ch; ...原创 2018-12-22 14:28:33 · 1269 阅读 · 2 评论 -
【数据结构】线索二叉树(构造与遍历)
主要内容基本概念 构造线索二叉树 遍历线索二叉树基本概念遍历二叉树是对非线性结构结点的线性化过程,由此得到的遍历序列中,每个结点有且仅有一个前驱和后继(除了序列中的第一个和最后一个结点)。原始二叉链表的结点结构仅包含数据元素信息和左右指针域,若在结点结构中增加前驱和后继的指针域,则该存储结构称为线索二叉树。虽然可以直接增加两个指针域来实现这种结构,但这样会使结构的存储密...原创 2018-12-31 19:49:50 · 7431 阅读 · 1 评论 -
【数据结构】最短路径(迪杰斯特拉算法和弗洛伊德算法)
主要内容基本概念 迪杰斯特拉算法(单源点) 弗洛伊德算法(顶点对)基本概念最简单的最短路径是求中转次数最少的路径,而不考虑每条边的权值。而在实际问题中,路径长度的度量就不再是路径上的边数,而是路径上所有边的权值之和。在有向网中,习惯上称路径的第一个顶点为源点(Source),最后一个顶点为终点(Destination)。下面主要讨论两种最常见的最短路径问题:一、从某...原创 2018-12-22 04:06:22 · 1128 阅读 · 0 评论 -
数据结构知识整理 - 遍历图 - 广度优先搜索
主要内容广度优先搜索 以邻接矩阵为存储结构的广度优先搜索遍历 以邻接表为存储结构的广度优先搜索遍历 图的遍历算法是实现图的其他算法的基础,图的遍历方式有两种:深度优先搜索遍历和广度优先搜索遍历。深度优先搜索遍历类似于树的先序遍历(根节点→左子树→右子树),借助了栈结构以实现递归;广度优先搜索遍历则类似于层次遍历,借助于队列结构实现。因为图的任意两个顶点都有可能存在联系,所以在...原创 2018-12-22 04:15:09 · 424 阅读 · 0 评论 -
B-树和B+树的简要介绍
B-树和B+树二叉排序树、平衡二叉树等查找方法均适用于存储在计算机内存中较小的文件,统称为内查找法。若文件很大且存放于外存进行查找时,这些查找方法就不适用了。内查找法均以结点为单位进行查找,需要反复地进行内、外存的交换。1970年,适用于外查找的平衡多叉树——B-树被提出来,磁盘管理系统中的目录管理,以及数据库系统中的索引组织多数采用B-树这种数据结构。B+树是B-树的一种变形,更...原创 2018-12-27 19:25:48 · 187 阅读 · 0 评论 -
数据结构知识整理 - 平衡二叉树
平衡二叉树(Balanced Binary Tree)平衡二叉树是由一般的二叉排序树经过平衡调整得到的,每个结点的左右子树深度差小于等于1的特殊的二叉排序树。已经提到,二叉排序树的平均查找长度与它的形态有关,其中平衡二叉树就是一种最好的形态。特征:1)左右子树深度差的绝对值小于等于1;2)左右子树也是平衡二叉树。(递归) 为了表示左右子树的深度差,我们给每个结点增加一个...原创 2018-12-27 19:34:59 · 327 阅读 · 0 评论 -
【数据结构】最小生成树 之 克鲁斯卡尔算法
基本概念假设要在n个城市之间建立通信联络网,则连通n个城市只需要n-1条线路。这时,自然会考虑如何在最省经费的前提下完成任务。在一个连通网的所有生成树中,各边的代价之和最小的那棵生成树称为该连通网的最小生成树。MST性质:最小生成树中必定存在一条具有最小权值的边。普利姆(Prim)算法和克鲁斯卡尔(Kruskal)算法是两个利用MST性质构成最小生成树的算法。普利姆算法的核心思想是...原创 2019-06-19 00:26:22 · 635 阅读 · 0 评论