我们知道栈的原理(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;
}
其实这个过程就是不断创建数组,复制数组数据的过程,是否发现这样的效率好低???
其实只要能理解这个过程,而这个过程不那么伤脑筋,还是…挺简单的。
总结:
实现了栈的基本功能。