zoukankan      html  css  js  c++  java
  • 栈--链表实现

    栈:后进先出 LIFO
    生活实例:先进电梯后出来

    存储元素的基本结构:

    public class Node {
        /*
        元素有两部分:
        元素的值
        下一个元素的引用
         */
        Object data;//数据域
        Node next; //指针域
        public Node(){}
        public Node(Object data,Node next){
            this.data=data;
            this.next=next;
        }
    }

    实现栈:

    /**
     * Created by yaming
     * 栈的链式存储
     */
    public class LinkStack{
        private Node top;//栈顶元素
        private int size;//当前栈大小
        public LinkStack(){
            top=null;
        }
    
        /**
         * 当前栈的大小
         * @return
         */
        public int length() {
           return size;
        }
    
        /**
         * 判断栈是否为空
         * @return
         */
        public boolean isEmpty() {
            return size==0?true:false;
        }
    
        /**
         * 入栈
         * @param data
         * @return
         */
        public boolean push(Object data){
            Node node=new Node(data,null);
            if(isEmpty()){
                top=node;
            }else {
                node.next=top;//把元素放在栈顶,引用指向栈顶
                top=node;
            }
            size++;//元素入栈,栈顶上升
            return true;
        }
    
        /**
         * 出栈
         * @return
         */
        public Object pop(){
            if(isEmpty()){
                return null;
            }else {
                Node value=top;//得到栈顶元素
                top=top.next;//更新头节点
                value.next=null;//栈顶元素的引用设置为null,该元素被回收
                size--;
                return value.data; //出栈的元素
            }
        }
    
        /**
         * 返回栈顶元素
         * @return
         */
        public Object peek(){
            if(isEmpty()){
                return null;
            }
            return top.data;
        }
    
        /**
         * 遍历栈
         * @return
         */
        public String stack(){
            if(isEmpty()){
                return "[]";
            }else {
                StringBuilder stringBuilder=new StringBuilder("[");
                for (Node current=top;current!=null;current=current.next){
                    stringBuilder.append(current.data.toString()+", ");
                }
                int length=stringBuilder.length();
                return stringBuilder.delete(length-2,length).append("]").toString();
            }
        }
    
      public void clear(){
            top=null;
            size=0;
        }
    }
  • 相关阅读:
    springMVC 使用WebApplicationContext获取ApplicationContext对象
    idea for mac 最全快捷键整理
    装饰模式 应用场景和实现
    RabbitMQ基础知识详解
    jetty 介绍以及小例子
    业务对象的贫血模型与充血模型
    同构与异构
    Java设计模式之策略模式与状态模式
    C++之内部类(嵌套类)与外部类及友元
    深入理解Java中为什么内部类可以访问外部类的成员
  • 原文地址:https://www.cnblogs.com/inspred/p/8052349.html
Copyright © 2011-2022 走看看