1. 程式人生 > >棧的陣列實現

棧的陣列實現

棧的實現方式一:陣列實現

package stack;
/**
 * 
 * <p>
 * 功能描述:
 * </p>
 * @author 鍾良健 
 * @company   
 * @version  V1.0
 */
public class stackUtil {
	private Object[] stack;
	private int size;
	public stackUtil(){
		stack=new Object[10];
	}
	/**
	 * 
	 * 建構函式
	 * 1、自定義棧的容量,注意容量必須大於0,否則預設容量為10
	 * @param count 棧容量
	 */
	public stackUtil(int count){
		if(count>=0){
			stack=new Object[count];
			return;
		}
			stack=new Object[10];
	}
	/**
	 * 
	 * 方法描述: 返回棧實際大小 
	 * @return
	 * @author 鍾良健
	 */
	public int getSize(){
		return size;
	}
	/**
	 * 
	 * 方法描述:
	 * 1、實現動態陣列防止新增資料時陣列越界異常
	 * 2、具體詳細可參考list集合原始碼
	 * @author 鍾良健
	 */
	public void ensureCapacity(){
		if(getSize()==stack.length){
			Object newStack=new Object[getSize()*3/2+1];
			System.arraycopy(stack, 0, newStack, 0, getSize());
			stack=(Object[]) newStack;
		}
	}
	/**
	 * 
	 * 方法描述: 
	 * @param obj
	 * @author 鍾良健
	 */
	public void push(Object obj){
		ensureCapacity();
		stack[size]=obj;
		size++;
	}
	/**
	 * 
	 * 方法描述: 
	 * @author 鍾良健
	 */
	public Object pop(){
		return stack[--size];
	}
	/**
	 * 
	 * 方法描述: 列印棧內元素
	 * @author 鍾良健
	 */
	public void printfStack(){
		for(int i=0;i<getSize();i++){
			System.out.println(stack[i]);
		}
	}
	public static void main(String[] args) {
		stackUtil stack=new stackUtil();
		stack.push("1");
		stack.push("2");
		stack.push("3");
		stack.push("5");
		stack.push("6");
		stack.push("7");
		stack.push("8");
		stack.push("9");
		stack.push("10");
		stack.push("11");
		stack.push("12");
		//System.out.println(stack.pop());
		stack.printfStack();
		System.out.println("--"+stack.getSize());
		
	}
}