下压堆栈(链表实现)

来源:互联网 发布:windows界面停止工作 编辑:程序博客网 时间:2024/04/28 07:16
import java.util.Iterator;import java.util.Scanner;public class Stack<Item> implements Iterable<Item> {private Node first;// 栈顶private int N;// 元素数量// 定义结点的嵌套类private class Node{Item item;Node next;}public boolean isEmpty() { return N==0; }public int size() { return N; }public void push(Item item){Node oldfirst=first;first=new Node();first.item=item;first.next=oldfirst;N++;}public Item pop(){Item item=first.item;first=first.next;N--;return item;}@Overridepublic Iterator<Item> iterator() {return new ListIterator();}private class ListIterator implements Iterator<Item>{private Node current=first;@Overridepublic boolean hasNext() {return current!=null;}@Overridepublic Item next() {Item item=current.item;current=current.next;return item;}@Overridepublic void remove() {}}public static void main(String[] args) {Stack<String> s=new Stack<String>();Stack<String> all=new Stack<String>();Scanner cin=new Scanner(System.in);while(cin.hasNext()){String item=cin.next();if(item.equals("$")) break;if(!item.equals("-")){s.push(item);all.push(item);System.out.print("push "+item);}else if(!s.isEmpty()){System.out.print("pop  "+s.pop());}System.out.println(" | "+s.size()+" left on stack");}// Test iteratorfor(String str : all){System.out.print(str+" ");}System.out.println();}}
// Test exampleto be or not to - be - - that - - - is $push to | 1 left on stackpush be | 2 left on stackpush or | 3 left on stackpush not | 4 left on stackpush to | 5 left on stackpop  to | 4 left on stackpush be | 5 left on stackpop  be | 4 left on stackpop  not | 3 left on stackpush that | 4 left on stackpop  that | 3 left on stackpop  or | 2 left on stackpop  be | 1 left on stackpush is | 2 left on stackis that be to not or be to 

0 0
原创粉丝点击