
数据结构与算法
文章平均质量分 81
max_bay
这个作者很懒,什么都没留下…
展开
-
优先队列---最大堆:Java语言实现
1 堆(heap)的简单介绍 堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:a. 堆中某个节点的值总是不大于或不小于其父节点的值;b. 堆总是一棵完全二叉树。 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。堆的定义如下:n个元素的序列{k1,k2...原创 2018-05-22 23:24:15 · 1542 阅读 · 0 评论 -
平衡二叉树——AVL树的旋转操作:Java语言实现(这篇有误, 后续会重写订正,不要再学习这篇了!!!)
1 前言 最近在研读《数据结构与算法经典问题解析》和《数据结构与算法分析 c语言描述》两本书,记录一下学习AVL树的笔记。2 平衡二叉树——AVL树的旋转操作2.1 AVL树的特点AVL树本质上还是一棵二叉搜索树,它的特点是:1.本身首先是一棵二叉搜索树。2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。也就是说,AVL树,本质上是带了平衡功能的二叉查找树(...原创 2018-05-21 23:34:28 · 3567 阅读 · 8 评论 -
二叉搜索树的插入、删除、查找等操作:Java语言实现
1 二叉搜索树介绍 二叉搜索树(BST, Binary Search Tree),也称二叉排序树或二叉查找树。二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质:1. 非空左子树的所有键值小于其根结点的键值。2. 非空右子树的所有键值大于其根结点的键值。3. 左、右子树都是二叉搜索树。2 二叉搜索树的主要操作2.1 二叉搜索树的查找操作 查找从根结点开始,如果树为空,...原创 2018-05-20 17:39:33 · 2069 阅读 · 0 评论 -
基于单向链表的方法实现队列:Java语言实现
1 前言 使用单向链表也可以实现队列,通过在链表的末端插入元素的方式实现入队(EnQueue)操作,通过删除链表的表头元素实现出队(DeQueue)操作。2 基于单向链表的方法实现队列2.1 创建结点类package Queue_Study;/** * Created by Administrator on 2018/5/13. */public class LLNode {...原创 2018-05-13 23:51:31 · 410 阅读 · 0 评论 -
二叉树的非递归遍历:Java语言实现
1 前言 上一篇写了《二叉树的递归遍历:Java语言实现》,现在用java实现下二叉树的非递归遍历。2 二叉树的非递归遍历2.1 先序遍历 根据前序遍历访问的顺序,优先访问根结点,然后再分别访问左孩子和右孩子。即对于任一结点,其可看做是根结点,因此可以直接访问。访问完之后,若其左孩子不为空,按相同规则访问它的左子树;当访问其左子树时,再访问它的右子树。因此其处理过程如下:对...原创 2018-05-20 00:42:20 · 648 阅读 · 0 评论 -
基于动态数组实现循环队列:Java语言实现
1 前言 上一篇写了《基于简单循环数组实现队列:Java语言实现》,但是一旦队列的最大空间给出,满栈后再执行入队操作将会产生溢出异常,这里采用采用动态数组的方法实现队列。2 基于动态数组实现循环队列package Queue_Study;/** * Created by Administrator on 2018/5/13. */public class DynamicArr...原创 2018-05-13 22:09:21 · 492 阅读 · 1 评论 -
基于简单循环数组实现队列:Java语言实现
1 队列的简单介绍 队列(Queue)是限定只能在一端插入、另一端删除的线性表。允许删除的一端叫做队首(front),这种操作也叫出队dequeue;允许插入的一端叫做队尾(rear)这种操作也叫入队enqueue;没有元素的队列称为“空队列”。队列具有先进先出(FIFO)的特性。1.1 普通顺序队列存在的问题 在普通顺序队列中,入队的操作就是先将尾指针rear右移一个单位,然后将元素值赋值给...原创 2018-05-13 21:04:42 · 358 阅读 · 1 评论 -
二叉树的递归遍历:Java语言实现
1 前言 所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。 由于二叉树的递归遍历相对与非递归遍历而言,形式统一,代码简单,比较容易理解。所以,本文先用Java实现二叉树的递归遍历方法。下篇博文介绍非递归遍历的实现。2 二叉树的...原创 2018-05-19 18:49:48 · 961 阅读 · 0 评论 -
基于单向链表的方法实现栈:Java语言实现
1 前言 使用单向链表也可以实现栈,通过在链表的表头插入的方式实现push操作,删除链表的表头结点(栈顶结点)实现pop操作。具体push操作和单向链表在链表头部添加结点的方法类似,具体pop操作和单向链表在链表头部删除结点的方法类似。大家忘记的话,可以看看我之前的文章《单向链表的基本操作: java语言实现》。2 基于单向链表的方法实现栈2.1 创建结点类package Stack_...原创 2018-05-13 15:48:48 · 1067 阅读 · 0 评论 -
树的定义、表示和二叉树及存储结构
1 前言 最近又看了一遍浙大的数据结构视频课程《浙江大学数据结构慕课》,感觉讲得很不错。为方便以后复习及查阅,现把树的定义、表示和二叉树及存储结构的这两节的内容以图片的形式摘录至此。2 树的定义及树的表示2.1 树的定义2.2 树的一些基本术语2.3 树的表示 由于树中的每个结点的度不统一,所以显然,首先我们想到的是结构体加链表的形式对其进行表示。 我们知道,当...原创 2018-05-19 16:00:32 · 3789 阅读 · 0 评论 -
基于动态数组的方法实现栈:Java语言实现
1 前言 上一篇写了《基于简单数组的方法实现栈:Java语言实现》,但是一旦栈的最大空间给出,满栈后再执行入栈操作将会产生溢出异常,这里采用采用动态数组的方法实现栈,用数组倍增的技术解决满栈的问题,但是需要注意的是,倍增太多可能会导致内存溢出。2 基于动态数组的方法实现栈package Stack_Study;/** * Created by Administrator on 2...原创 2018-05-13 14:52:57 · 303 阅读 · 0 评论 -
基于简单数组的方法实现栈:Java语言实现
1 栈的简单介绍 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出(First In Last Out,FILO)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作入栈,它是把...原创 2018-05-13 14:19:59 · 318 阅读 · 0 评论 -
双向循环链表的基本操作: java语言实现
1. 双向循环链表简单介绍 双向循环链表(Doubly Circular Linked List)是循环链表的一种。双向循环链表在双向链表的基础上,将表头结点的前驱指针指向尾结点,尾结点的后驱指针指向表头结点,首尾相连形成一个双向环。2 双向循环链表的基本操作2.1 创建结点类//创建一个双向链表结点类,并用get,set方法获取其数据。public class DCLLNode {...原创 2018-05-12 22:45:05 · 3005 阅读 · 2 评论 -
单向循环链表的基本操作: java语言实现
1. 单向循环链表简单介绍 单向循环链表(Singly Circular Linked List)是另一种形式的链式存贮结构。与单向链表不同,单向循环链表中没有next指针为null的结点,它的特点是表中最后一个结点的指针域指向表头结点,整个链表形成一个环。2 单向循环链表的基本操作2.1 创建结点类public class SCLLNode { private int data...原创 2018-05-12 20:48:35 · 549 阅读 · 2 评论 -
双向链表的基本操作: java语言实现
1 双向链表的简单介绍 前不久,写了一篇关于博文《单向链表的基本操作: java语言实现》,现在写一下双向链表的基本操作。与单向链表相比,双向链表多了一个前驱指针域。具体表示结构如下:previous域--存放结点的直接前驱的地址(位置)的指针域data域--存放结点值的数据域next域--存放结点的直接后继的地址(位置)的指针域 双向链表的主要优点是对于任意给的结点,...原创 2018-05-10 00:00:12 · 2736 阅读 · 2 评论 -
单向链表的基本操作: java语言实现
文章首发地址:知乎专栏 https://zhuanlan.zhihu.com/p/363094171 链表的简单介绍链表(Linked List)是一种链式存取的数据结构,链表中的数据是以结点来表示的。具体表示结构如下:data域--存放结点值的数据域next域--存放结点的直接后继的地址(位置)的指针域链表主要有三种:单向链表(Singly Linked List)双向链表(Doubly Lin...原创 2018-05-02 00:11:48 · 746 阅读 · 0 评论 -
并查集详解
并查集不再单独自己写Java代码实现了,看了几篇不错的文章,在此记录下。1. 数据结构--并查集的原理及实现(这篇是java语言实现)以下3篇都是转载的同一篇文章的,感觉写的挺通俗且有趣。2. 并查集详解 (转)3. 超有爱的并查集~4. 一个很有意思的并查集详解...原创 2018-05-22 23:43:23 · 215 阅读 · 0 评论