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

本文介绍了一个简单的栈数据结构实现,并且该栈还实现了Iterable接口,便于遍历操作。通过具体的Java代码展示了栈的基本操作,如压栈(push)、弹栈(pop)、查看栈顶元素(peek)等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一个栈的简单实现,同时也实现了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 + " >"));

     }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值