十一、一个简单的栈stack实现

一、栈的出栈和入栈规则

——先入后出或者说是后入先出

二、简单栈代码展示

/**
 * @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 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值