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