java 实现链栈存储

package com.learn.algorithm.linkStack;
/**
 * 链栈实现
 * @author Jiekun.Cui
 * @param <T>
 */
public class LinkStack<T> {

    private LinkStack<T>.Node<T> top = new Node<T>();
    private int size=0;

    /**
     * 进栈
     * @param t
     * @return  ;
     */
    public boolean push(T t){

        if ( isEmpty() ) {
            top.next = new Node<T>(t);

        } else {
            Node<T> newNode = new Node<T>(t, top.next);
            top.next = newNode;
        }
        size ++ ;
        return true;
    }

    /**
     * 出栈
     * @param t
     * @return
     */
    public T pop(){

        if ( isEmpty() ) {
            return  null;
        } else {
            LinkStack<T>.Node<T> node = top.next;
            top.next = node.next;
            size --;
            return node.getT();
        }
    }

    /**
     * 获取栈顶元素
     * @return
     */
    public T getTop(){
        if ( isEmpty() ) {
            return  null;
        } else {
            return top.next.getT();
        }
    }

    /**
     * 判断栈是不是为空
     * @return
     */
    public boolean isEmpty(){
        return size() == 0;
    }

    /**
     * 返回栈的大小
     * @return
     */
    public int size(){
        return size;
    }

    /**
     * @author 链栈的节点类
     * @param <T>
     */
    class Node<T>{
        private T t = null;
        private Node<T> next = null;

        public Node(){

        }
        public Node(T t){
            this.t = t;
        }
        public Node(T t,Node<T> next){
            this.t = t;
            this.next =next;
        }

        public T getT() {
            return t;
        }
        public void setT(T t) {
            this.t = t;
        }

        public Node<T> getNext() {
            return next;
        }
        public void setNext(Node<T> next) {
            this.next = next;
        }
    }
}
package com.learn.algorithm.linkStack;

/**
 * 链栈测试
 * @author Jiekun.Cui
 */
public class Demo {

    public static void main(String[] args) {
        LinkStack<Integer> ls = new LinkStack<>();

        ls.push(1);
        ls.push(2);
        ls.pop();
        ls.push(4);
        ls.push(5);
        ls.push(6);

        while ( !ls.isEmpty() ) {
            System.out.println(ls.pop());
        }

    }

}

以上代码。

时间: 2024-10-14 10:57:01

java 实现链栈存储的相关文章

Java实现链式存储的二叉树

二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要有:先序遍历(NLR),中序遍历(LNR),后序遍历(LRN),和层次遍历. 注意: 由二叉树的先序序列和中序序列可以唯一地确定一颗二叉树: 由二叉树的后序序列和中序序列可以唯一地确定一颗二叉树: 由二叉树的层序序列和中序序列可以唯一地确定一棵二叉树: 但,由二叉树的先序序列和后序序列无法唯一地确定

java实现链栈

前面学习了java实现顺序栈:http://www.cnblogs.com/lixiaolun/p/4644134.html 接下来,学习java实现链栈. 链栈类代码: package linkedstack; public class LinkStack { private Element base; private Element top; class Element { public Object data; public Element next; } /** * 初始化栈 * */

线性表的Java实现--链式存储(单向链表)

线性表的Java实现--链式存储(单向链表) 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链式存储结构的线性表将采用一组任意的存储单元存放线性表中的数据元素.由于不需要按顺序存储,链表在插入.删除数据元素时比顺序存储要快,但是在查找一个节点时则要比顺序存储要慢. 使用链式存储可以克服顺序线性表需要预先知道数据大小的缺点,链表结构可以充分利用内存空间,实现灵活的内存动态管理.但是链式存储失去了数组随机存取的特点,同时增加了节点的指针域,空

栈的Java实现--链栈

栈的Java实现--链栈 链栈,顾名思义,就是以链表的形式实现的栈的相关操作,其实是功能弱化了的链表,如果已经阅读过链表的实现代码,那么链栈的实现显得更为容易. 链栈的基本结构: 链栈的入栈操作: 让top引用指向新的节点,新节点的next指向原来的top 记录栈内元素个数的size+1 链栈的出栈操作: top引用指向原栈顶元素的下一个元素(top.next),并释放原栈顶元素的引用 记录栈内元素个数的size-1 链栈的Java实现代码: package com.liuhao.DataStr

java使用链栈实现数制转换

java实现链栈在前面有所介绍:http://www.cnblogs.com/lixiaolun/p/4644141.html 将前面java实现链栈的代码稍作修改: package linkedstack; public class LinkStack { private Element base; private Element top; class Element { public Object data; public Element next; } /** * 初始化栈 * */ pu

线性表的Java实现--链式存储(双向链表)

有了单向链表的基础,双向链表的实现就容易多了. 双向链表的一般情况: 增加节点: 删除节点: 双向链表的Java实现: package com.liuhao.algorithm;      public class DuLinkList<T> {          /**       * 内部类:链表中的一个节点       *        * @author liuhao data 节点中的数据 prev 指向前一个节点的引用 next 指向下一个节点的引用       */       

栈的链式存储结构及应用(C、Java代码)

链式存储结构最大的好处就是没有空间的限制,可以通过指针指向将结点像以链的形式把结点链接,我们熟悉的线性表就有链式存储结构. 当然,栈同样有链式存储结构,栈的链式存储结构,简称链栈. 从图片可以看到,和单链表很像,拥有一个头指针top,又称作栈顶指针,所以此时就不再需要单链表里面的头结点了. 对于链栈来说,基本不存在栈满的情况,除非计算机内存已经没有了可使用的空间,如果真的存在,那么计算机系统已经面临着即将死机崩溃的情况,而不是这个链栈是否溢出的问题了. 对于空栈来说,链表的定义是头指针指向NUL

java实现二叉树的链式存储

package com.fxr.二叉树链式存储; import java.util.Scanner; public class Tree { static final int MAXLEN = 20; static Scanner input = new Scanner(System.in); CBTType InitTree() { CBTType node; if((node = new CBTType()) != null) { System.out.println("请输入一个根节点的数

Java数据结构-线性表之栈(顺序栈和链栈)

栈的定义:(特殊的线性表) ??仅在表的一端进行插入和删除的线性表.允许插入.删除的这一端称为栈顶,另一端称为栈底.表中没有元素时称为空栈. ??被称为后进先出的线性表(Last In First Out),简称 LIFO表,或被称为先进后出的线性表(First In Last Out),简称 FILO表. ??栈更具存储方式的不同分为两种:顺序栈和链栈. 顺序栈: 和顺序表一样,顺序栈也采用数组来存放数据元素: 为了保证栈底位置的不变,采用数组下标为0的位置作为顺序栈的栈底. 而栈顶指针的最大