java数据结构——链表实现栈

package Stack;

import java.util.List;

public class ListStack<T> {
    public ListStack() {
    }

    private static class Node<T>{
        public T data;   //数据域
        public Node<T> next;  //后继
        public Node(T d,Node<T> n){
            data=d;
            next=n;
        }
    }

    //栈的高度
    private int size;
    //栈顶的位置
    private int top;

    private Node<T> head;
    public ListStack(int size){
        this.size=size;
        head=new Node <>(null,null); //初始化头节点,头节点占用一个元素节点
        top=0;
    }

    //获得栈高度
    public int getSize() {
        return size;
    }

    //返回一个代表栈顶的位置的整数 基准为-1
    public int getTop() {
        return top;
    }

    /**
     * 判断是否为空栈
     */
    public boolean isEmpty()     {
        return top == -1;
    }

    /**
     * 判断是否为满栈
     */
    public boolean isFull() {
        return (top+1) == size;
    }


    /**
     * 压栈操作
     * @param data
     * @return
     */
    public boolean push(T data) {
        if(isFull()) {
            System.out.println("the stack is full!");
            return false;
        } else {
            top++;          //栈顶指针上升一
           /*
           * 1、获取到最后一个节点
           * 2、新建一个节点
           * 3、添加节点之间的关系
           * */
            Node<T> p;
            System.out.println(head.next);
            p=head;
            while(p.next!=null){
                p=p.next;
            }

           Node<T> newnode=new Node <>(data,null);
           p.next=newnode;
        }
        return true;
    }
            //获取顶部节点,删除
    public Node<T> pop(){
        Node<T> p;          //创建一个临时代理对象
        Node<T> last;
        p=head.next;
        for (int i=0;i<getTop()-1;i++){
            p=p.next;
        }
        last=p.next;
        p.next=null;
        top--;
        return last;
    }

    public Node<T> peek(){
        Node<T> p;          //创建一个临时代理对象
        p=head.next;
        while(p.next!=null){
            p=p.next;
        }
        top--;
        return p;
    }

    public static void main(String[] args){
        ListStack<String> listStack=new ListStack <>(10);   //初始化一个长度为3的栈
        listStack.push("test1");
        listStack.push("test2");
        listStack.push("test3");
        listStack.push("test4");
        System.out.println(listStack.getTop());
        System.out.println(listStack.peek().data);
        System.out.println(listStack.pop().data);
        System.out.println(listStack.peek().data);

    }
}

猜你喜欢

转载自blog.csdn.net/qq_40692753/article/details/82986719