首页 > 代码库 > 下压堆栈(链表实现)

下压堆栈(链表实现)

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;
	}
	
	@Override
	public Iterator<Item> iterator() {
		return new ListIterator();
	}
	private class ListIterator implements Iterator<Item>{
		private Node current=first;
		@Override
		public boolean hasNext() {
			return current!=null;
		}

		@Override
		public Item next() {
			Item item=current.item;
			current=current.next;
			return item;
		}

		@Override
		public 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 iterator
		for(String str : all){
			System.out.print(str+" ");
		}
		System.out.println();
	}
}
// Test example
to be or not to - be - - that - - - is $
push to | 1 left on stack
push be | 2 left on stack
push or | 3 left on stack
push not | 4 left on stack
push to | 5 left on stack
pop  to | 4 left on stack
push be | 5 left on stack
pop  be | 4 left on stack
pop  not | 3 left on stack
push that | 4 left on stack
pop  that | 3 left on stack
pop  or | 2 left on stack
pop  be | 1 left on stack
push is | 2 left on stack
is that be to not or be to