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();
}
}
[size=large]输出结果为:[/size]
栈的大小: 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