Java之链表实现栈结构】的更多相关文章

package com.wzlove.stack; import java.util.Iterator; import java.util.NoSuchElementException; /** * 链表实现栈结构:栈的结构是先进后出,所以栈的结点也包括了两个部分 * 1.构造函数初始化栈 * 2.判空操作 * 3.栈的长度操作 * 4.入栈 * 5.出栈 * 6.返回最近入栈的元素 * 7.格式化输出 * * @author WZLOVE * @create 2018-07-14 21:53…
杂谈"栈"结构: 栈(Stack)是一种插入删除操作都只能在一个位置上进表,这个位置位于表的末端,叫做栈顶(Top). 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于插入和删除操作. 栈结构又叫做LIFO(后进先出)表.归根结底是一个表结构,因此任何能够实现表结构的方法都能实现栈. 在java语言中,ArrayList和LinkedList都支持栈操作,栈操作都是常数时间的操作,栈的实现方式一般有两种,一种是使用顺序存储的方式,即使用数组来实现,用ArrayList可以轻…
泛型是Java SE5.0的重要特性,使用泛型编程可以使代码获得最大的重用.由于在使用泛型时要指明泛型的具体类型,这样就避免了类型转换.本实例将使用泛型来实现一个栈结构,并对其进行测试. 思路分析:既然是用泛型实现栈结构,那就不能用JDK自带的stack包了,需要自己定义一个栈结构,比如LinkedList. 代码如下: Stack.java: package cn.edu.xidian.crytoll; import java.util.LinkedList; public class Sta…
1.用链表实现栈 package stack; /** * * @author denghb * */ class Link { public long dData; public Link next; public Link(long dd) { dData = dd; } public void displayLink() { System.out.print(dData + " "); } } class LinkList { private Link first; public…
栈 是一种基于后进先出(LIFO)策略的集合类型.当邮件在桌上放成一叠时,就能用栈来表示.新邮件会放在最上面,当你要看邮件时,会一封一封从上到下阅读.栈的顶部称为栈顶,所有操作都在栈顶完成. 前面提到的新邮件,就是在栈顶入栈(push),阅读的时候从栈顶取出一封就是出栈(pop).就像下面这个图一样,你不能从最下面直接拿一封信出来. package ABAB; /** * 链表实现栈 * @param <Item> */ public class Stack<Item> { pri…
class LinkedStack<T> { private Node top; private int size; /** * 初始化栈 */ public LinkedStack() { top = null; size = 0; } /** * 判断栈是否为空 * * @return */ public boolean isEmpty() { return size == 0; } /** * 清空栈元素 */ public void clear() { top = null; size…
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值,至少在一段时间之后,技术可以很快得到提高.同时,它也是软考的重点,我们需要对这部分的内容进行一下总结. 我们先看一下数据结构和算法的整体内容. 1.线性表 概念: 数据元素的排列方式是线性的. 分类: 分类规则是根据上图中元素的存储结构来划分的. (1)顺序表 基本思想:元素的存储空间是连续的.在内…
前言 其实在学习数据结构之前,我也是从来都没了解过这门课,但是随着工作的慢慢深入,之前学习的东西实在是不够用,并且太皮毛了.太浅,只是懂得一些浅层的,我知道这个东西怎么用,但是要优化.或者是解析,就不知道该咋弄了.比如JAVA 最有名的几个容器: List Set MAP Queue 这些都是涉及到有关数据结构的,以及一些简单的算法.排序.冒泡排序.二分法这些,都要涉及到时间复杂度.以及数据结构的知识,这门课,还是很重要的. 为了啥 其实数据结构,结构这个词,就是将我们原本的一些数据,按照某种结…
一.定义 栈是一种线性表结构,栈结构中有两端,对栈的操作都是对栈的一端进行操作的,那么被操作的一端称为栈顶,另一端则为栈底.对栈的操作其实就是只有两种,分别是入栈(也称为压栈)和出栈(也称为弹栈).入栈,将新元素压入栈中,那么此时这个栈元素就成为了栈顶元素,栈深度相应的+1.出栈,将栈中的栈顶元素弹出来,此时栈顶的下一个元素就会成为新的栈顶元素,栈深度也相应的-1.根据入栈和出栈的规则,也可以得到栈数据的顺序是后进先出(LIFO,LAST IN FIRST OUT)的特性.栈结构的效率是非常高的…
一.单链表 1.在我们数据结构中,单链表非常重要.它里面的数据元素是以结点为单位,每个结点是由数据元素的数据和下一个结点的地址组成,在java集合框架里面 LinkedList.HashMap(数组加链表)等等的底层都是用链表实现的. 2.下面是单链表的几个特点: 数据元素在内存中存放的地址是不连续的:单链表的结点里面还定义一个结点,它里面保存着下一个结点的内存地址,在实例化对象的时候,jvm会开辟不同内存空间,并且是不连续的. 添加效率高:添加一个元素时,先找到插入位置的前一个,只需要将1,2…
栈是一种先进后出的数据结构,出栈入栈都是操作的栈顶元素,下面是利用Java语言实现的一个简单的栈结构 class MyStack{ private int size;//栈大小 private Object[] elementData;//栈中元素 private int top;//栈顶指针 public MyStack(int size){ this.size = size; this.top = 0; this.elementData = new Object[size]; } publi…
Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在网上看到一个更好的解释): 栈帧(Frame)是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接 (Dynamic Linking).方法返回值和异常分派(Dispatch Exception). 栈帧在什么地方? 内存 -> 运行时数据区 -> 某个线程对应的虚拟机栈 ->…
java实现 数据结构:链表. 栈. 队列.优先级队列.哈希表   数据结构javavector工作importlist 最近在准备找工作的事情,就复习了一下java.翻了一下书和网上的教材,发现虽然很多书是用java讲数据结构的,但是侧重于将数据结构本身的知识,利用java本身的类库来实现数据结构的系统性的讲解少之又少,所以在此做一下总结,方便各位正在准备工作的和用java实现数据结构的朋友们. 附:代码下载:http://download.csdn.net/detail/sunnyskyli…
Java描述表达式求值的两种解法:双栈结构和二叉树 原题大意:表达式求值 求一个非负整数四则混合运算且含嵌套括号表达式的值.如: # 输入: 1+2*(6/2)-4 # 输出: 3.0 数据保证: 保证表达式合法(含除数不为0). 保证运算数是非负整数. 双栈版 维护两个栈: 符号栈,数字栈,遍历输入串过程中计算 数字直接入栈 符号入栈 a. 符号栈为空 b. 当前符号优先于栈顶符号 c. 栈顶为'(' 符号出栈计算: 栈顶符号非'(' 且 优先级更高. class ExpStack { pri…
1.java实现节点 /** * 节点 * @luminous-xin * @param <T> */ public class Node<T> { T data; Node<T> next; public Node(Node<T> n){ next = n; } public Node(T obj,Node<T> n){ data = obj; next = n; } public T getData(){ return data; } pub…
//================================================= // File Name : LinkStack_demo //------------------------------------------------------------------------------ // Author : Common //类名:Link_long //属性: //方法: class Link_long{ //链节点类 public long dData…
package com.rao.linkList; /** * @author Srao * @className LinkedStack * @date 2019/12/3 13:59 * @package com.rao.linkList * @Description 基于链表的栈 */ public class LinkedStack { /** * 定义节点 */ static class Node{ private String data; private Node next; pub…
总结提高,与君共勉 概述. 数据结构与算法亘古不变的主题,链表也是面试常考的问题,特别是手写代码常常出现,将从以下方面做个小结 [链表个数] [反转链表-循环] [反转链表-递归] [查找链表倒数第K个节点] [查找链表中间节点] [判断链表是否有环] [从尾到头打印单链表-递归] [从尾到头打印单链表-栈] [由小到大合并有序单链表-循环] [由小到大合并有序单链表-递归] 通常在java中这样定义单链表结构 <span style="font-family:Microsoft YaHe…
链表.栈与队列.kmp; 数组模拟单链表: 用的最多的是邻接表--就是多个单链表: 作用:存储树与图 需要明确相关定义: 为什么需要使用数组模拟链表 比使用结构体 或者类来说 速度更快 代码简洁 算法题:空间换时间 题目详情 图解: head存储链表头,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前用到了哪个节点 import java.util.*; public class Main{ static int N = 100010; static int idx,head;…
C++中使用了模板来减少方法相同但是类型不一样带来的函数重载以及大量复制代码的问题.这里主要说说类模板   类模板的定义:   template<TYPENAME Type>   class Stacks   {   public:   Stacks(void):   Stacks(int nSize):   Stacks(Type Arr[],int nSize):   ~Stacks(void):   public:   bool isEmpty():   bool isFull():  …
堆与栈都是java中常用的存储结构,是内存中存放数据的地方. 堆:主要存放运行时创建(new)的对象.主要用于储存对象,存取速度慢,可以运行时动态分配内存,生命周期不需要提前确定. 栈:主要存放基础类型的变量,以及对象的引用变量.主要用于执行程序,存取速度快,生命周期必须要提前确定,缺少灵活性. public class Test{ public static void main(String[] args){ int i=0; //基本数据类型变量 鸭子 duck =new 鸭子(1,1000…
一.栈的定义及知识 1.定义:栈又称为栈或者堆叠,是计算机科学中的一种特殊的串列形式的抽象数据类型,特殊之处在于只允许在链表或者数组的一端(堆栈顶端指针,又称 "top")加入数据push(压栈)和输出数据pop(弹栈),另外栈也可以使用一维数组和链表来实现. 2.栈的特点: a.先进后出(后进先出),也就是说,我们只能在栈顶端push(压栈)加入数据,也只能在栈顶端pop(弹栈)删除数据: b.栈除了top(栈顶)和base(栈底)之外,其他的每个元素都有一个前驱和后继: 二.php…
链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域. 相比于线性表顺序结构,操作复杂.由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(l…
题目:输入一个链表的头结点,从尾到头反过来打印出每一个节点的值 考察 单链表操作.栈.递归等概念. 理解:要实现单链表的输出,那么就须要遍历.遍历的顺序是从头到尾.而节点输出的顺序是从尾到头.因此,先遍历到的节点后输出.这是一个典型的 "后进先出". 要实现这种输出,能够使用栈,或,递归. 通过这道题,让我对 "递归在本质上就是一个栈结构" 理解的更加深刻. 代码例如以下: /*********************************************…
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/guyuealian/article/details/51119499 Java单链表反转 Java实现单链表翻转     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/51119499 (一)单链表的结点结构:   data域:存储数据元素信息的域称为数据域:     next域:存储直接后继位置的域称为指针域,它是存放…
Java 单向链表学习 链表等同于动态的数组:可以不同设定固定的空间,根据需要的内容动态的改变链表的占用空间和动态的数组同一形式:链表的使用可以更加便于操作. 链表的基本结构包括:链表工具类和节点类,节点类是工具类的内部类,这样可以便于Link和Node类之间的属性调用和方法使用,也有效的封装了Node类不被外部所使用: Link类主要负责处理外部类和Node类之间的关系以及链表内容的存储:Node类负责具体的链表结构的操作,比如:添加链表时需要将新的链表放在上一个链表的后面则需要Link调用N…
什么是栈结构 栈结构是从数据的运算来分类的,也就是说栈结构具有特殊的运算规则,即:后进先出. 我们可以把栈理解成一个大仓库,放在仓库门口(栈顶)的货物会优先被取出,然后再取出里面的货物. 而从数据的逻辑结构来看,栈结构起始就是一种线性结构. 如果从数据的存储结构来进一步划分,栈结构包括两类: 顺序栈结构: 即使用一组地址连续的内存单元依次保存栈中的数据.在程序中,可以定义一个指定大小的结构数组来作为栈,序号为0的元素就是栈低,再定义一个变量top保存栈顶的序号即可. 链式栈结构: 即使用链表的的…
说明: 本文主要展示Python实现的几种常用数据结构:顺序表.链表.栈和队列. 附有实现代码. 来源主要参考网络文章. 一.顺序表 1.顺序表的结构 一个顺序表的完整信息包括两部分,一部分是表中元素集合,另一部分是为实现正确操作而需记录的信息,即有关表的整体情况的信息,这部分信息主要包括元素存储区的容量和当前表中已有的元素个数两项. 2.顺序表的两种基本实现方式 图a 为一体式结构,存储表信息的单元与元素存储区以连续的方式安排在一块存储区里,两部分数据的整体形成一个完整的顺序表对象.一体式结构…
堆 Java堆是和Java应用程序关系最密切的内存空间,几乎所有的对象都放在其中,并且Java堆完全是自动化管理,通过垃圾收集机制,垃圾对象会自动清理,不需自己去释放. 根据垃圾回收机制的不同,Java堆有可能拥有不同的结构,最为常见的就是将整个Java堆分为新生代(Young Gen)和老年代(Tenured Gen).其中新生代存放新生的对象或者年龄不大的对象,老年代则存放老年对象. 新生代分为edn区,s0区,s1区,s0和s1也被称为from和to区域,他们是两块大小相等,并且可以互相转…
练习一下java单链表的简单习题 package com.test1; import java.util.Stack; public class SingleListDemo { /** * 返回单链表的总长度 * @param sl * @return */ public static <T> int getListLength(SingleList<T> sl) { Node<T> temp = sl.headNode.next; int index = 0; wh…