/**
 * @desc:  栈结构-单链表实现
 * @author: 毛会懂
 * @create: 2020-12-29 18:03:00
 **/
public class MyStack<T> implements Iterable<T>{
    private Node head; //头节点,指向栈顶,默认指向空
    private Integer count;//栈的大小

    public MyStack(){
        head = new Node(null,null);
        count = 0;
    }

    //进栈
    public void push(T t){
        Node node = new Node(t,head.next);
        head.next = node;
        count++;
    }

    //出栈
    public T pop(){
        if(head.next != null){
            Node node = head.next;
            head.next = node.next;
            count--;
            return node.t;
        }
        return null;
    }

    //是否空栈
    public Boolean isEmpty(){
        return count == 0;
    }

    //栈的大小
    public Integer size(){
        return count;
    }

    @Override
    public Iterator<T> iterator() {
        return new MyIterator(head);
    }

    private class MyIterator implements Iterator{
        private Node node;

        public MyIterator(Node head) {
            this.node = head;
        }

        @Override
        public boolean hasNext() {
            return node.next != null;
        }

        @Override
        public T next() {
            node = node.next;
            return node.t;
        }
    }

    private class Node{
        private T t;
        private Node next;

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

测试:

public static void main(String[] args) {
MyStack<Integer> myStack = new MyStack<>();
myStack.push(10);
myStack.push(20);
System.out.println("第一次出栈:"+myStack.pop());
System.out.println("栈的大小:" + myStack.size());
System.out.println("栈是否为空:" + myStack.isEmpty());
System.out.println("第一次遍历栈");
for (Integer i : myStack){
System.out.println(i);
}
System.out.println("第二次遍历栈");
myStack.forEach(System.out::println);
System.out.println("结束");
System.out.println("第二次出栈:" + myStack.pop());
System.out.println("第三次出栈:" + myStack.pop());
}
posted on 2020-12-31 13:42  毛会懂  阅读(106)  评论(0编辑  收藏  举报