每日一省————链表之栈的简单实现
来源:互联网 发布: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
- 每日一省————链表之栈的简单实现
- 每日一省————链表之队列的简单实现
- 每日一省之————利用数组和链表实现一个简单的HashMap
- 每日一省之 ———— 一个简单的跳跃表(Skip List)的Java实现
- 每日一省之————红黑树的java实现
- 每日一题——实现取最小值的栈
- iOS每日一记——————之简单的去重操作。。。。
- 每日一题之栈的实现
- 每日一题——memcpy,strcpy,memmove的实现
- 每日一题——atoi,itoa函数的实现
- iOS 每日一记 之—— application的生命周期
- 每日一省之—基于双数组和二分查找法实现符号表(或者字典)
- iOS每日一记————————简单的实现委托 Block代码块 功能 和简单的自定义View
- iOS每日一记之———————复制 粘贴 转发功能的实现
- [每日一学]MFC学习笔记——简单计算器
- 每日一Vim(2)——简单搜索
- 每日一省之————递归法计算数组的所有排列组合
- 每日一省之———— 递归 + 回溯 求集合的幂集
- cvc-complex-type.2.3: Element 'dependency' cannot have character [children], because the type's cont
- 第五章--读取文件的各种姿势
- CSS3 之媒体查询Media Query
- 总结23中设计模式应用场景
- gcc安装 error: cannot compute suffix of object files: cannot compile
- 每日一省————链表之栈的简单实现
- vim窗口的一些命令
- 【leetcode】String——Palindrome Pairs(336)
- 插入排序
- 递归的定义以及递归的示例(计算阶乘、计算斐波那契数、递归二分查找、回文串递归方法解决、汉诺塔问题、递归选择排序问题)
- kafka笔记
- BZOJ1272: [BeiJingWc2008]Gate Of Babylon
- objective-c 中new与alloc/init的区别
- dir函数:遍历文件名