数据结构之美
iLemon
内外兼修
展开
-
单链表之Java实现
单链表介绍我们将处理一般的形如A1,A2,A3.....An的表。我们说这个表的大小是N,我们称大小为零的表为空表。对于除空表以外的任何表,我们说A2后继A1,并称A1是A2的前驱。原创 2013-04-24 01:32:47 · 555 阅读 · 0 评论 -
循环双链表之Java实现(模拟JDK中LinkedList)
单链表只有一个指针,仅仅指向当前结点的直接后继,为了弥补这个缺陷,故而引入双链表。所谓双链表,就是每个Element都包含它本身存储的数据和两个指针,分别指向上一个和下一个Element,其结构如下:我们可以很容易的写出表示链表结点的Java Code: private T value=null;//use storage data原创 2013-05-02 17:04:51 · 940 阅读 · 0 评论 -
队列——java实现
定义现实生活中,我们去排队买东西,先排的先走,后排的后走。在程序中,这就是队列即先进先出(First in first out)表.结构实现本文使用链表实现队列,如下:package com.lemon.queue;import java.util.NoSuchElementException;/** * this class原创 2013-05-07 22:53:59 · 577 阅读 · 0 评论 -
栈——java实现
定义栈是一种后进先出的数据结构,即Last in first out,故又称LIFO表。栈只在表的一端进行插入(push)和删除(pop)操作,允许插入和删除的一端称为栈顶,另一端则为栈底。结构如下图:实现使用单链表实现栈,代码如下:package com.lemon.stack;/** * this class us原创 2013-05-07 11:14:05 · 600 阅读 · 0 评论 -
栈的应用
栈的应用后缀表达式计算后缀表达式的基本思路是:当遇到一个数时就把它推入栈中;在遇到一个运算符时该运算符就作用于从该栈弹出的两个数上,将所得结果推入栈中。例如,常规中缀记法的“3 - 4 + 5”在逆波兰记法中写作“3 4 - 5 +”:先3减去4,再加上5 java 实现package com.lemon.stack;public class Pos原创 2013-05-22 15:05:25 · 681 阅读 · 0 评论 -
栈的应用之检测平衡符号
前言本文主要是模拟这样一个场景:编译器检查程序的语法错误,在本文中,我不打算实现某种编程语言的语法检查,而是将问题限定在——检测括号是否成对上。最终我们希望达到这样一个效果:每一个右花括号、右方括号、右大括号,必然要对应一个相应的左花括号、左方括号以及左大括号。也就是说;1.序列:{[()]} 是合法的。2.序列:{[()]}} 则是非法的。算法本文的算法可以描述如原创 2016-05-12 16:47:50 · 4111 阅读 · 0 评论 -
栈的应用之中缀表达式转后缀
前言栈的一个广泛应用就是讲中缀表达式转换为后缀表达式。所谓中缀表达式就是我们从小到大所接触的:10+3-6/2+4*5 之类的算数表达式。而后缀表达式又称为逆波兰表达式,它是由波兰逻辑学家J.Lukasiewicz于1929年提出的。为什么需要后缀表达式转换算法那么如何将中缀表达式转换为后缀呢?最简单的步骤如下:1.按照优先级将整个表达式从里到外加满括号原创 2016-05-09 11:53:15 · 1233 阅读 · 0 评论 -
根据中序遍历结果和前序(后序)遍历结果重构二叉树
问题描述:输入某二叉树的中序和前序(后序)遍历结果,请重构出该二叉树。首先,我们需要回顾二叉树的三种遍历方式:前序遍历:根+左子树+右子树中序遍历:左子树+根+右子树后序遍历:左子树+右子树+根假设,当前二叉树的前序遍历结果为{1,2,4,5,3,6},中序遍历结果为{4,2,5,1,3,6}我们首先尝试分步构造:1.前序遍历的第一个元素,必然是树根,此处为原创 2016-06-21 13:30:09 · 4083 阅读 · 0 评论