什么是栈:
“栈又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。
栈的特点:
- 1、栈的插入和删除只允许在线性表的一端进行
- 2、“先进后出”,“后进先出”
- 3、栈具有记忆功能
- 4、” 栈顶通常用(Top)表示,栈底通常用(Bottom)表示。
- 5、栈底指针不变,栈中元素随栈顶指针的变化而变化。
- 6、栈支持子程序调用
数组模拟栈分析:
1 初始化栈
2 栈满
3 栈空
4 入栈
5 出栈
6 打印栈
完整代码:
//测试代码自己实现就OK了
/**
* 定义一个栈
*/
class ArrayStack{
private Object[] stack;//栈[可以存储任何数据类型]
private int index = -1;//栈帧
/**
* @param maxStack 栈中元素个数
*/
public ArrayStack(int maxStack){
stack = new Object[maxStack];
}
/**
* 栈满
*/
public boolean isFull(){
return index >= stack.length-1;
}
/**
* 栈空
*/
public boolean isAir(){
return index < 0;
}
/**
* 入栈
*/
public void push(Object value){
//判断是否栈满
if (isFull()) throw new RuntimeException("栈已满!无法添加数据!");
index++;
stack[index] = value;
System.out.println("入栈成功:stack["+index+"] = "+stack[index]);
}
/**
* 出栈
*/
public void pop(){
if (isAir()) throw new RuntimeException("栈已空!无法出栈");
//Object objects = stack[index];//接收Top的数据
System.out.println("出栈成功,出栈的数据是:"+stack[index]);
index--;
}
/**
* 显示栈的情况【遍历栈】
*/
public void list(){
if (isAir()){
System.out.println("栈是空的,无法打印数据");
return;
}
for (int i=index;i>=0;i--){
System.out.println("stack["+i+"] = "+stack[i]);
}
}
}