Java_LinkedStack 链栈分享

Java_LinkedStack 链栈分享

具体内容的解释都写在注释里了

StackLnterface接口类

public interface StackLnterface0 {
    public interface StackInterface {
        //在接口处声明方法,在类内进行实现T
        public void push(T element);//用于表达进栈的方法
        public  T pop();//用于表达出栈的方法
        public boolean isEmpty();//用于判断栈是否为空的方法的方法
    }
}

LinkedStack接口实现


class LinkedNode{
    private T data;//声明data
    private LinkedNode next;//声明next
    public LinkedNode(T i){//定义有参构造函数
        data = i;
        next = null;
    }
    public LinkedNode(){//定义无参构造函数
        data = null;
        next = null;
    }
    //data和next 的getter and setter
    public T getData(){
        return data;
    }
    public void setData(T element){
        data = element;
    }
    public LinkedNodegetNext(){
        return next;
    }
    public void setNext(LinkedNodesuccessor){
        next = successor;
    }
}

public class LinkedStack  implements StackLnterface0 {    //通过重新实现多个接口
    protected LinkedNode top;//声明top指针

    public LinkedStack() {
        //栈的初始化,初始化一个空栈
        LinkedNode first = new LinkedNode();//定义一个空节点
        top = first;//把空节点放在最开头
    }

    public void push(T element) {//用于表达进栈的方法
        LinkedNode s = new LinkedNode(element);//用s来代表要输入的元素
        s.setNext(top);//让新进入的元素指向它的上一位元素
        top = s;//top指针指到s上面
    }

    public T pop() {//用于表达出栈的方法
        if (isEmpty())//先判断是否空栈,如果是空栈就抛出异常
            throw new RuntimeException("栈空");
        T top_node = top.getData();//定义一个记录top指针指向元素的变量
        top = top.getNext();//出栈后top指针指向下一个要出栈位置的元素
        return top_node;//返回出栈时读取的元素
    }

    public boolean isEmpty() {//用于判断栈是否为空的方法的方法
        if (top == null)//如果top指针指向null的话
            return true;//说明栈空
        else
            return false;//否则就是栈非空
    }

    public T getTop(){//用于表达展示当前的指针指向元素的方法
        if(isEmpty())//先判断是否空栈,如果是空栈就抛出异常
            throw new RuntimeException("栈空");
        T top_node = top.getData();//定义一个记录top指针指向元素的变量
        return top_node;//返回top指向的元素
    }

    public void getLz() {//用于展示当前链栈的方法
        LinkedNode a = top;//定义此时的a代替top指针
        while (a.getNext()!=null){//当a的引用域不为null时
            System.out.print(a.getData()+"\n");//输出此时a的数据域
            a = a.getNext();//往下循环a让元素一个一个轮流展示
        }
    }
}
 class ShiJian1{//实践类
    public static void main(String[] args){
       LinkedStack linked = new LinkedStack();//实现T范型为int类型
        //输入要加入链栈的元素
       linked.push(6);
       linked.push(7);
       linked.push(8);
       linked.push(9);
       linked.getLz();
       //进行出栈操作
       System.out.println("进行一次出栈操作,得到元素"+linked.pop());
       System.out.println("再进行一次出栈操作,得到元素"+linked.pop());
       linked.getLz();
       System.out.println("此时的top指针指向元素为"+linked.getTop());

    }
}

运行结果

Java_LinkedStack 链栈分享_第1张图片


以上就是本文全部内容,如果它对您有帮助,请您帮我点个赞,这对我真的很重要

你可能感兴趣的:(java数据结构算法学习程序员)