Java - - 数组实现栈基本功能

package com.ct.stack;

/**
 * @author Chalmers
 * @version 创建时间:2015年10月24日 下午10:10:13
 */
public class StackDemo {

	// 初始容量
	private int capacity = 10;
	// 增量
	private double increment = 1.5;
	// 栈中数据数量
	private int length = 0;
	// 用来实现栈功能的数组
	private Object[] src = new Object[capacity];

	//默认大小
	public StackDemo() {

	}

	// 自定义初始栈的大小
	public StackDemo(int initCapacity) {
		this.capacity = initCapacity;
	}

	// 判断栈是否为空
	public boolean isEmpty() {

		return length == 0 ? true : false;
	}
	
	//扩充栈的容量
	public Object[] extend(){
		Object[] dest = new Object[(int)(src.length * increment)];
		
		System.arraycopy(src, 0, dest, 0, src.length);
		
		return dest;
	}
	
	//压栈
	public void push(Object obj){
		if(length >= src.length){
			src = extend();
		}
		
		src[length] = obj;
		length ++;
	}
	
	//取栈顶元素
	public Object peek(){
		
		if(isEmpty()){
			throw new NullPointerException();
		}
		
		return src[length-1];
	}
	
	//取出栈顶元素并删除
	public Object pop(){
		if(isEmpty()){
			throw new NullPointerException();
		}
		
		length --;
		return src[length];
	}
	
	//获得栈的元素个数
	public int size(){
		
		return length;
	}
}


测试类
package com.ct.stack;
/** 
 * @author Chalmers
 * @version 创建时间:2015年10月24日 下午10:30:51 
 */
public class StackTest {

	public static void main(String[] args) {
		StackDemo sd = new StackDemo();
		
		for(int i=0; i<20; i++){
			sd.push(new Integer(i));
		}
		
		while(!sd.isEmpty()){
			System.out.print("栈的大小: "+sd.size()+" ");
			System.out.println("栈顶元素为: "+sd.pop());
		}
		//sd.pop();
	}
}



输出结果为:
栈的大小: 20 栈顶元素为: 19
栈的大小: 19 栈顶元素为: 18
栈的大小: 18 栈顶元素为: 17
栈的大小: 17 栈顶元素为: 16
栈的大小: 16 栈顶元素为: 15
栈的大小: 15 栈顶元素为: 14
栈的大小: 14 栈顶元素为: 13
栈的大小: 13 栈顶元素为: 12
栈的大小: 12 栈顶元素为: 11
栈的大小: 11 栈顶元素为: 10
栈的大小: 10 栈顶元素为: 9
栈的大小: 9 栈顶元素为: 8
栈的大小: 8 栈顶元素为: 7
栈的大小: 7 栈顶元素为: 6
栈的大小: 6 栈顶元素为: 5
栈的大小: 5 栈顶元素为: 4
栈的大小: 4 栈顶元素为: 3
栈的大小: 3 栈顶元素为: 2
栈的大小: 2 栈顶元素为: 1
栈的大小: 1 栈顶元素为: 0

猜你喜欢

转载自moonmonster.iteye.com/blog/2251717