首页 > 代码库 > 泛型定容栈

泛型定容栈

import java.util.*;

//泛型定容栈 
//泛型:类型参数化,便于处理不同类型的数据
public class FixedCapacityStack<Item> {
	private Item[] a;
	private int N;
	public FixedCapacityStack(int cap){
		// java中不允许直接创建泛型数组,此处用类型转换来实现
		// 这样写会有警告,但可以忽略之
		a=(Item[]) new Object[cap];
	}
	
	public boolean isEmpty() { return N==0; }
	public int size() { return N; }
	
	public void push(Item item){
		a[N++]=item;
	}
	public Item pop(){
		return a[--N];
	}
 	public static void main(String[] args) {
 		FixedCapacityStack<String> s;
 		s=new FixedCapacityStack<String>(100);
 		
 		Scanner cin=new Scanner(System.in);
 		while(cin.hasNext()){
 			String item=cin.next();
 			if(!item.equals("-")){
 				s.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 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