通过链表实现一个栈

栈是一个先进后出的数据结构,本篇文章使用链表来实现一个栈。

一、定义栈的方法接口

这里定义了栈的几个主要方法:

public interface IStack<E> {
    /**
     * 栈元素大小
     * @return
     */
    int size();

    /**
     * 是否为空
     * @return
     */
    boolean empty();

    /**
     * 压栈
     * @param item
     */
    void push(E item);

    /**
     * 弹栈
     * @return
     */
    E pop();

    /**
     * 查看栈顶元素
     * @return
     */
    E peek();
}

二、实现

/**
 * 通过链表实现栈
 * @param <E>
 */
public class LinkedStack<E> implements IStack<E> {

    private static class Node<E>{
        public E data; // 数据域
        public Node<E> next; // 指针域

        public Node(E data, Node<E> next){
            this.data = data;
            this.next = next;
        }
    }

    // 栈顶元素/节点 , 链表最后的那个元素
    private Node<E> top;
    private int size = 0; // 栈中元素数量

    public LinkedStack(){
        top = null;
        size = 0;
    }

    /**
     * 栈元素大小
     * @return
     */
    @Override
    public int size() {
        return size;
    }

    /**
     * 是否为空
     * @return
     */
    @Override
    public boolean empty() {
        return size == 0;
    }

    /**
     * 压栈
     * @param item
     */
    @Override
    public void push(E item) {
        top = new Node(item, top);
        size ++;
    }

    /**
     * 弹栈
     * @return
     */
    @Override
    public E pop() {
        if(size == 0){
            throw new EmptyStackException();
        }
        E result = top.data;
        top = top.next;

        return result;
    }

    /**
     * 查看栈顶元素
     * @return
     */
    @Override
    public E peek() {
        if(size == 0){
            throw new EmptyStackException();
        }
        return top.data;
    }

    public static void main(String[] args) {
        IStack<Integer> stack = new LinkedStack<>();
        for (int i = 0; i < 10; i++) {
            stack.push(i+1);
        }
        System.out.println("弹出元素:"+stack.pop());
        System.out.println("弹出元素:"+stack.pop());

        for (int i = 0; i < 8; i++) {
            System.out.println("弹出剩余元素:"+stack.pop());
        }
    }
}

测试结果:

弹出元素:10
弹出元素:9
弹出剩余元素:8
弹出剩余元素:7
弹出剩余元素:6
弹出剩余元素:5
弹出剩余元素:4
弹出剩余元素:3
弹出剩余元素:2
弹出剩余元素:1


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章