下压堆栈 (链表实现)

来源:互联网 发布:传奇物品数据库代码 编辑:程序博客网 时间:2024/05/16 02:14
//下压堆栈 (链表实现)package Algorithms;import java.util.Iterator;import java.util.NoSuchElementException;import java.util.Stack;import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class P94_Stack<Item> implements Iterable<Item> {private Node<Item> first;   //栈顶(最近添加的元素)private int n;   //元素数量private static class Node<Item>{//定义了结点的嵌套类private Item item;private Node<Item> next;}public P94_Stack(){first = null;n = 0;}public boolean isEmpty(){return first == null;}public int size(){return n;}public void push(Item item){//向栈顶添加元素Node<Item> oldfirst = first;first = new Node<Item>();first.item = item;first.next = oldfirst;n++;}public Item pop(){//从栈顶删除元素if (isEmpty()){throw new NoSuchElementException("Stack underflow");}Item item = first.item;first = first.next;n--;return item;}public Item peek(){if (isEmpty()){throw new NoSuchElementException("Stack underflow");}return first.item;}public String toString(){StringBuilder s = new StringBuilder();for (Item item : this){s.append(item + " ");}return s.toString();}public Iterator<Item> iterator(){return new ListIterator<Item>(first);}private class ListIterator<Item> implements Iterator<Item>{private Node<Item> current;public ListIterator(Node<Item> first){current = first;}@Overridepublic boolean hasNext() {// TODO Auto-generated method stubreturn current != null;}@Overridepublic Item next() {// TODO Auto-generated method stubif (!hasNext()){throw new NoSuchElementException();}Item item = current.item;current = current.next;return item;}@Overridepublic void remove() {// TODO Auto-generated method stubthrow new UnsupportedOperationException();}}public static void main(String[] args) {// TODO Auto-generated method stubP94_Stack<String> stack = new P94_Stack<String>();while (!StdIn.isEmpty()){String item = StdIn.readString();if (!item.equals("-")){stack.push(item);}else if (!stack.isEmpty()){StdOut.print(stack.pop() + " ");}}StdOut.println("(" + stack.size() + " left on stack)");}}

0 0
原创粉丝点击