一、栈的出栈和入栈规则
——先入后出或者说是后入先出
二、简单栈代码展示
/**
* @use 自定义栈
* @author lattice
*
*/
class MyStack {
private Object[] elements;
private int size=0;
//设置栈size
private static final int MYSTACK_LENGTH = 20;
public MyStack(){
elements=new Object[MYSTACK_LENGTH];
}
//入栈
public void push(Object obj){
//开辟新的栈空间,用于存放新的数据
enSureCapacity();
elements[size++]=obj;
}
//出栈
public Object pop(){
if(size==0)
throw new EmptyStackException();
Object result=elements[size-1];
elements[--size]=null;//清空过期引用。eleminate absolete reference
return result;
}
/**
* 处理满栈的情况
*/
private void enSureCapacity(){
if(elements.length == size)
elements =Arrays.copyOf(elements, size+1);
}
}
三、由代码分析栈的入栈出栈规则
1、出栈pop()和入栈push()
pop()每次都是将栈顶,即下标最大的元素取出来并销毁这个下标所对应的元素(设置为null对象)
push()每次都是将元素放到栈的最顶上一个元素位置上方,即最大下标+1的下标对应的位置
所以这样的出栈和入栈规则决定栈只能是先入后出顺序,就像10辆车往一个不能调头的死胡同里面跑,前面的车要么在后面的车进入之前完成进去并且出来,要么就只能等后面进去的车都出来了才能出来。
2、enSureCapacity()保证每次往栈里面房源素的时候都有位置来放这个新元素。
四、自定义栈测试及结果
public static void main(String [] args){
String str="this is lattice testing";
System.out.println(str);
MyStack stack=new MyStack();
for(int i=0;i<100;i++){
stack.push(i);
}
for(int i=0;i<100;i++){
if(i%10==0){
System.out.println("");
}
System.out.print(stack.pop()+" ");
}
}
//运行结果运行结果结果
this is lattice testing
99 98 97 96 95 94 93 92 91 90
89 88 87 86 85 84 83 82 81 80
79 78 77 76 75 74 73 72 71 70
69 68 67 66 65 64 63 62 61 60
59 58 57 56 55 54 53 52 51 50
49 48 47 46 45 44 43 42 41 40
39 38 37 36 35 34 33 32 31 30
29 28 27 26 25 24 23 22 21 20
19 18 17 16 15 14 13 12 11 10
9 8 7 6 5 4 3 2 1 0