这是在学习java数据结构和算法时写的一个用数组实现栈的程序。
具体功能有:能动态扩充栈的大小,而且当栈内元素少于整个栈容量的1/3的时候,栈就会缩小容量,减小内存消耗。
stack接口:
public interface Stack {
public int getSize();//获取栈的大小
public boolean isEmpty();//判断栈是否为空
public Object top();//获取栈顶元素(不删除)
public void push(Object ele);//入栈
public Object pop();//出栈
}
Stack_Array类
public class Stack_Array implements Stack{
private static int SIZEDEFAULT=10; //栈默认大小为10
private int capacity;
private Object[] s;
protected int num=0;//栈内元素数量
public static void setSizeDefault(int size) throws NegativeArraySizeException{
if(size < 0){
throw new NegativeArraySizeException("The default size of stack is less than 0");
}
SIZEDEFAULT=size;
}
public Stack_Array(){
s= new Object[SIZEDEFAULT];
capacity=SIZEDEFAULT;
}
public Stack_Array(int size){
s= new Object[size];
capacity=size;
}
public int getSize() {
// TODO Auto-generated method stub
return capacity;
}
/**
* 判断栈是否为空
*/
public boolean isEmpty() {
// TODO Auto-generated method stub
return num<= 0;
}
/**
* 获取栈顶元素
*/
public Object top() {
// TODO Auto-generated method stub
if(!isEmpty()){
return s[num-1];
}else{
System.out.println("the stack is empty ,the top element is null !");
return null;
}
}
/**
* 往stack里添加元素
*/
public void push(Object ele) {
// TODO Auto-generated method stub
if(num+1>capacity){
expend();
}
s[num++]=ele;
}
/**
* 扩大数组的大小
*/
private void expend(){//当栈容量不足以push的时候,扩大栈
capacity=capacity*2;
Object temp[]= new Object[capacity];
System.arraycopy(s, 0, temp, 0, s.length);
s=temp;
}
/**
* 缩小数组的大小
*/
private void narrow(){
capacity=capacity/2;
Object temp[]= new Object[capacity];
System.arraycopy(s, 0, temp, 0, s.length/3);
s=temp;
}
/**
* 从栈中取出数据,
*/
public Object pop() {
// TODO Auto-generated method stub
if(isEmpty()){
System.out.println("the stack is empty ,it can't pop anything !");
return null;
}
if(--num< capacity/3){//当栈内的数据少于栈大小的三分之一的时候,将栈减小,节省内存空间。
narrow();
}
return s[num];
}
}
工程下载 http://download.csdn.net/detail/a292643788/8080187