手撸 ? Stack

我们知道栈的原理(Stack)即:就像小时候玩的子弹枪一样,最先压入的最后才打出来。
作用: 判断符号是否违法,存储计算指令…
而它的底层原理是由数组实现的(链表也可以实现),即用新数组存储变化后的值,在赋值给原来的数组即可 :
构造方法:


	private int [] old ;
	
	public MyStack()
	{
		// 设置默认栈的大小
		this.old = new int[0];
	}
	
 public void push(int element)
	{
		int[] newArry = new int[old.length+1];
		//将原来的数组元素赋值给新的数组
		for(int i=0;i<old.length;i++)
		{
			newArry[i]=old[i];
		}
		//将push的值放入新数组
		newArry[old.length] = element;
		//将新数组的值赋给old数组
		old = newArry;
	}
//弹出栈顶元素
	public int pop()
	{
		//先判断栈是否为空
		if(old.length==0)
		{
			throw new RuntimeException("stack is empty!");
		}
		int  topNum = old[old.length-1];
		//将栈顶元素在数组中删除
		int newArry[] = new int[old.length-1];
		
		for(int i=0;i<old.length-1;i++)
		{
			newArry[i]=old[i];
		}
		//将新数组的值赋给old数组
		old = newArry;
		//返回栈顶元素
		return topNum;
	}
//查看栈顶元素
	public int peek()
	{
		//先判断栈是否为空
		if(old.length==0)
		{
			throw new RuntimeException("stack is empty!");
		}
		//将栈顶元素返回即可
		return old[old.length-1];
	}
	//判断栈是否为空
	public boolean isEmpty()
	{
		return old.length==0;
	}

其实这个过程就是不断创建数组,复制数组数据的过程,是否发现这样的效率好低???
其实只要能理解这个过程,而这个过程不那么伤脑筋,还是…挺简单的。
总结:
实现了栈的基本功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章