
数据结构
文章平均质量分 93
NFE_W
这个作者很懒,什么都没留下…
展开
-
数据结构的Java实现(六)—— 前缀、中缀、后缀表达式
什么是前缀表达式,中缀表达式,后缀表达式?以 3+4-5为例:前缀表达式:操作符在操作数的前面,即 -+345 中缀表达式:操作符在操作数的中间,即 3+4-5 后缀表达式:操作符在操作数的后面,即 34+5-为什么计算机对前缀 / 后缀表达式比较方便?前缀 / 后缀表达式中不存在括号,通过前缀 / 后缀表达式可以很容易构造一颗运算树,通过该运算树,可以使用递归的方式很方便计算表...原创 2018-09-07 20:57:02 · 781 阅读 · 0 评论 -
数据结构的Java实现(十四)—— 图
1、图的定义图通常有个固定的形状,这是由物理或抽象的问题所决定的。比如图中节点表示城市,而边可能表示城市间的班机航线。如下图是美国加利福利亚简化的高速公路网: ①、邻接:如果两个顶点被同一条边连接,就称这两个顶点是邻接的。如上图 I 和 G 就是邻接的,而 I 和 F 就不是。②、路径:从某顶点到另一顶点经过的边的序列。比如从顶点B到顶点J的路径为 BAEJ。③、...原创 2018-10-02 20:26:17 · 377 阅读 · 2 评论 -
数据结构的Java实现(十三)—— 堆
1、堆的定义①、它是完全二叉树,除了树的最后一层节点不需要是满的,其它的每一层从左到右都是满的。注意下面两种情况,第二种最后一层从左到右中间有断隔,那么也是不完全二叉树。②、它通常用数组来实现。这种用数组实现的二叉树,假设节点的索引值为index,那么:节点的左子节点是 2*index+1 节点的右子节点是 2*index+2 节点的父节点是 (index-1)/2③...原创 2018-09-26 22:24:58 · 199 阅读 · 0 评论 -
数据结构的Java实现(十二)—— 哈希表
Hash表也称散列表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构。它基于数组,通过把关键字映射到数组的某个下标来加快查找速度,但是又和数组、链表、树等数据结构不同,在这些数据结构中查找某个关键字,通常要遍历整个数据结构,也就是O(N)的时间级,但是对于哈希表来说,只是O(1)的时间级。注意,这里有个重要的问题就是如何把关键字转换为数组的下标,这个转换的函数称...原创 2018-09-26 21:39:57 · 306 阅读 · 0 评论 -
Java实现单链表的反转
Node类: public class Node { int data; Node next; public Node(int data) { this.data = data; }}迭代实现:先将下一节点记录下来,然后让当前节点指向上一节点,再将当前节点记录下来,再让下一节点变为当前节点public static Node rev...原创 2018-09-21 00:26:46 · 333 阅读 · 0 评论 -
数据结构的Java实现(十一)—— 红黑树
二叉搜索树对于某个节点而言,其左子树的节点关键值都小于该节点关键值,右子树的所有节点关键值都大于该节点关键值。二叉搜索树作为一种数据结构,其查找、插入和删除操作的时间复杂度都为O(logn)。但这个时间复杂度是在平衡的二叉搜索树上体现的,也就是如果插入的数据是随机的,则效率很高,但是如果插入的数据是有序的,比如从小到大的顺序【10,20,30,40,50】插入到二叉搜索树中: 从大到小就...原创 2018-09-26 01:37:52 · 196 阅读 · 0 评论 -
数据结构的Java实现(十)—— 二叉树
目录树二叉树树树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。它是由n(n>=0)个有限节点组成一个具有层次关系的集合。节点一般代表一些实体,在java中节点一般代表对象。连接节点的线称为边,一般从一个节点到另一个节点的唯一方法就是沿着一条顺着有边的道路前进,在Java中边通常表示引用。特点:每个节点有零个或多个子节点;没有父节点的节点称为...原创 2018-09-14 15:11:44 · 304 阅读 · 0 评论 -
数据结构的Java实现(九)—— 希尔排序、快速排序
目录希尔排序快速排序在三种简单排序算法中,介绍了插入排序、冒泡排序、选择排序,它们的时间复杂度都是O(n2),在数据量大时,这三种排序所需要的时间是很难令人接受的。在上一篇介绍递归时,提到了归并排序,它的时间复杂度是O(NlogN),比简单排序快了很多,但它仍有个缺点,就是空间复杂度为O(n),当需要排序的数据占据了整个内存的一半以上的空间时,无法使用归并排序。本文介绍两种高级...原创 2018-09-10 13:11:15 · 337 阅读 · 0 评论 -
数据结构的Java实现(五)—— 队列
队列(queue)是一种特殊的线性表 ,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时,称为空队列。举例:排队结账,第一个进入排队序列的是第一个付完款离开队列的人,而最后进入排队序列排队的是付完款的。队列分为:单向队列(Queu...原创 2018-09-07 00:26:57 · 691 阅读 · 0 评论 -
数据结构的Java实现(四)—— 栈
栈(stack)是只能在某一端插入和删除的特殊线性表。它按照先进后出(FILO, First In Last Out)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。举例:只有一端开口的羽毛球筒就是一个栈,刚开始羽毛球筒是空的,也就是空栈,然后我们一个一个放入...原创 2018-09-06 16:12:31 · 156 阅读 · 0 评论 -
数据结构的Java实现(三)—— 三种简单排序算法
排序是数据处理中十分常见且核心的操作,虽说实际项目开发中很小几率会需要手动实现,毕竟每种语言的类库中都有多种关于排序算法的实现。但是了解这些精妙的思想还是很有好处的。以下简单温习下最基础的三类算法:选择,冒泡,插入。首先定义一个交换数组元素的函数,以供调用package yrwan08;public class Swap { /** * * @param arr * ...原创 2018-09-06 15:52:32 · 385 阅读 · 0 评论 -
数据结构的Java实现(二)—— 数组
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。介绍在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型(Object类型数组除外)。①、数组的声明:// 方式一类型[] 名称 = new 类型[长度];// 方式二类型[] 名称 = {元素1,元素2,……};②、数组的赋值...原创 2018-09-06 15:36:25 · 200 阅读 · 0 评论 -
数据结构的Java实现(一)—— 数据结构简介
数据结构的基本概念数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据数据元素的集合和该集合中数据元素之间的关系组成。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。数据结构的基本功能不同的数据结构其操作集不同,但下列操作必不可缺:结构的生成; 结构的销毁; 在结构中插入新的数据元素...原创 2018-09-06 14:55:46 · 203 阅读 · 0 评论 -
数据结构的Java实现(八)—— 递归
目录例:斐波那契数列例:有序数组的二分法查找例:汉诺塔问题 例:归并排序例:背包问题什么是递归? 是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合...原创 2018-09-09 20:24:48 · 281 阅读 · 0 评论 -
数据结构的Java实现(七)—— 单向链表、双端链表、双向链表
目录单向链表(Single Linked List)双端链表(HeadTailLinkedList)双向链表(DoubleLinkedList)总结链表(Linked List)是一种物理存储单元上非连续、非顺序的存储结构,它既可以表示线性结构,也可以用于表示非线性结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点组成,结点可以在运行时动态生成。每个...原创 2018-09-08 01:36:28 · 317 阅读 · 0 评论 -
栈和队列 互相实现
两个栈实现一个队列import java.util.Stack;// 用两个栈实现队列public class MyStackToQueue { Stack<Character> s1 = new Stack<>();// 负责入列 Stack<Character> s2 = new Stack<>();// 负责出列 publi...原创 2018-09-28 12:12:28 · 309 阅读 · 0 评论