//主要思想是通过一个数组作为一个栈的存储结构来实现栈的功能
public class StackOfInteger {
private int[] elements;
private int size;//栈中元素的个数,elements.length是数组长度即栈的大小capacity
public static final int DEFAULTY_CAPACITY=16;
public StackOfInteger(){
this(DEFAULTY_CAPACITY);
}
public StackOfInteger(int capacity){
elements=new int[capacity];//创建一个固定容量的数组
}
public boolean isEmpty(){//if(size==0) return true;//return size==0;
//elements肯定不为空啊
// if(elements==null)//这是我之前写的,错误地方是对这个栈的实现方法不清楚
// return true; //以为elements.length就是栈中元素真正的长度理解
// else return false;//不够透彻
return size==0;
}
public int peek(){
return elements[size-1];
}
public void push(int value){
//如果数组elements的长度不够存储 则扩大两倍 再push(value)
if(size>=elements.length){
int[] temp=new int[elements.length*2];
//然后将当前数组赋值给新数组temp
System.arraycopy(elements,0,temp,0,elements.length);
//再赋给elements
elements=temp;
}
//
elements[size++]=value;
}
public int pop(){
return elements[--size];
}
public int getSize(){
return size;
}
public int min(){
/*
* int[] e=elements.clone();
* //这是我第一次写min函数的时候用的复制的数组方法,结果
* 输出一直为0,后来才明白定义的栈类是数组,定义的capacity
* 才是数组的长度,而size才是真正的栈中元素的长度。
*
* 区别一下与下面定义数组e的区别
*/
int[] e=new int[size];
for(int i=0;i<size;i++){
e[i]=elements[i];
}
int min=e[0];
for(int i=0;i<e.length;i++){
if(min>e[i])
min=e[i];
}
return min;
}
}
学习心得:
*1.用数组的方式构建一个栈。
*2.实际数组的长度length是栈的容量,栈元素的个数应该是push进去的size