每日一省————链表之栈的简单实现

来源:互联网 发布:anaconda 改成python 2 编辑:程序博客网 时间:2024/04/27 19:18

这是一个栈的简单实现,同时也实现了Iterable接口。代码较简单,比起JDK自带的Stack类,简直弱爆了。但本人主要是为了复习而已,个人觉得还是有一定参考价值的,有兴趣的看一看吧。

具体实现代码如下:

import java.util.Iterator;import java.util.NoSuchElementException;public class Stack<T> implements Iterable<T>  {    private Node<T> first;    private int size;    public Stack()    {        this.first = null;        this.size = 0;    }    /**     * 定义一个静态类,表示节点     */    private static class Node<T> {        private T item;        private Node<T> next;    }    public void push(T item) {        Node<T> oldFirst = first;        first = new Node<T>();        first.item = item;        first.next = oldFirst;        size++;    }    public T pop() {       if (isEmpty()) throw new NoSuchElementException("栈为空,不能继续调用此方法");        T  t = first.item;        first = first.next;        size--;        return t;    }    public int size() {        return size;    }    public boolean isEmpty() {        return first == null;    }    public T peek() {        if(isEmpty()) throw new NoSuchElementException("栈为空");        return first.item;    }    @Override    public Iterator<T> iterator() {        return new StackIterator<T>(first);    }    /**     * 栈的迭代器的具体实现     * @author lhever     * @param <T>     */    private class StackIterator<T> implements Iterator<T> {            private Node<T> current;            public StackIterator(Node<T> node) {                current = node;            }            public boolean hasNext() {                return current != null;            }            public void remove() {                throw new UnsupportedOperationException();            }            public T next() {                if (!hasNext()) throw new NoSuchElementException();                T item = current.item;                current = current.next;                 return item;            }        }     public String toString() {            StringBuilder s = new StringBuilder();            for (T item : this)                s.append(item + " -> ");            return s.toString() + "null";        }     public static void main(String... args) {         Stack<Integer> stack = new Stack<Integer>();         stack.push(1);         stack.push(2);         stack.push(3);         stack.push(4);         System.out.println(stack);         System.out.println("栈的大小是: " + stack.size());         stack.peek();         System.out.println(stack);         System.out.println("栈的大小是: " + stack.size());        stack.pop();        System.out.println(stack);        System.out.println("栈的大小是: " + stack.size());        Iterator<Integer> iterator = stack.iterator();        iterator.forEachRemaining(t -> System.out.println("< " + t + " >"));     }}
0 0