随笔分类 - 数据结构与算法
摘要:这是最基本的三种数据结构,每个程序中都至少使用一种,比如说栈,递归程序其实就是借助方法调用栈来实现的,站在计算机的角度,没有什么问题是栈解决不了的。本文对这些数据结构进行说明。随后会在这个 GitHub 整理出相应的练习题和对应标签的 LeetCode 题目解答。 本文将讨论: 表、栈和队列相关概念,特点和基本操作 1. 表 表是一种逻辑结构,表示元素之间的相邻关系。按照元素在内存中...
阅读全文
摘要:算法就是一系列解决问题的指令,对于给定的输入,能够在有限时间内获得预期的输出。一个好的算法和一篇好的文章一样,都是不断努力,反复修正的结果。算法分析主要从运行时间和存储空间两方面讨论算法的效率。相信有些人会有这样的感觉,对于一些算法,有时一眼就能看出它的时间复杂度,但就是无法比较规范的表达出来。本文就系统的整理一下如何规范推导算法的时间和空间复杂度。 算法分析的一个依据是,输入规模(又称问...
阅读全文
摘要:1 概念 又称二叉查找树,简称BST。具有以下性质的二叉树: (1) 若左子树非空,则左子树上所有结点值均小于根结点的值 (2) 若右子树非空,则右子树上所有结点值均大于根结点的值 (3) 左,右子树本身也分别是一棵二叉排序树 也是一个递归的数据结构。下图是一个二叉排序树。 对其进行中序遍历得到一个
阅读全文
摘要:1.树的存储结构 树的存储方式有很多,既可以采用顺序存储,也可采用链式存储,不管采用哪种方式,都需要唯一地反映出树中各节点之间的逻辑关系,树有以下3中常用的存储结构。 1.1 双亲表示法 使用一组连续的空间存储每个结点,同时增加一个伪指针,指示其双亲结点在数组中的位置,如图所示,根节点下标为0,伪指
阅读全文
摘要:1. 基本概念 在链式存储中,发现二叉链表中存在大量的空指针,如果利用这些空指针指向其直接前驱或后继的指针,则可以更方便地运用某些二叉树操作算法。二叉树的线索化,是为了加快查找结点前驱和后继的速度。 在有N个结点的二叉树中,存在N+1个空指针。每个叶结点有2个空指针,度为1的结点有1个空指针,总的空
阅读全文
摘要:1 二叉树的链式存储 1.1 链式存储 顺序存储对空间利用率较低,所以,二叉树一般采用链式存储结构,用一个链表来存储一颗二叉树。二叉链表至少包含3个域:数据域data,左指针域lchild和右指针域rchild,如果再加上一个指向双亲结点的指针就变成了三叉链表。 二叉树的链式存储结构如下: 根据完全
阅读全文
摘要:1 二叉树的存储 1.1 顺序存储 使用数组自上而下,自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在某个数组下标为i-1的分量中,然后通过一些方法确定结点在逻辑上的父子和兄弟关系。 根据二叉树的性质,完全二叉树和满二叉树树采用顺序存储比较合适,树中结点的序号可以唯一地反
阅读全文
摘要:一、树的基本概念 1.1 树的定义 树是N个结点的有限集合,N=0时称为空树。任何一颗非空树均满足有且仅有一个根结点,其余结点可分为m个互不相交的有限集合,其中每一个集合本身又是一棵树,称为根结点的子树。 树的定义是递归的,一棵树由若干个子树组成,子树又由更小的子树构成。树是一种重要的非线性结构,也
阅读全文
摘要:1.栈常见应用 1.1 括号匹配 问题描述:假设表达有两种符号:圆的和方的,嵌套的顺序任意,判断嵌套是否正确,如 ([]()) 或 [[()]]均为正确,而 [(]) 或 (()] 均为不正确。 算法描述: (1)初始化一个空栈,顺序读入括号; (2)若是左括号直接进栈; (3)若是右括号,先出栈一
阅读全文
摘要:一、栈 1.栈的定义 栈是一种线性表,一种抽象数据类型,它只允许在一端进行插入或删除操作。又叫做LIFO(后进先出)线性表。 栈的基本操作有入栈push和出栈pop,栈顶top指的是进行操作的一端。如图,只有栈顶元素可以访问。进栈次序为a1、a2、a3、a4、a5,出栈次序为a5、a4、a3、a2、
阅读全文
摘要:引言 发现不写笔记,不造轮子,学习效率太低,数据结构和算法又很重要,每次看都看不完,这次下定决心总结一下,主要的方法是,看书了解概念和原理,每看完一部分做一些练习题,参考书籍有:《算法》,《数据结构与算法分析 C语言描述》,还有本王道的单科数据结构。 本笔记中的代码均是由Java实现,项目源码地址如
阅读全文
浙公网安备 33010602011771号