基本介绍:
1、栈是一个先入后出(FILO)的有序列表
2、栈是限制线性表中的元素的插入和删除只
在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另外一端为固定的一端,称为栈底(Bottom)
栈的应用场景:
数组模拟栈的思路分析:
1、使用数组来模拟栈
2、定义一个top表示栈顶,初始化为-1
3、入栈操作:当有数据加入到栈时,top++;stack[top] =data;
4、出栈操作:int value = stack[top];top–;return value
代码实现:
注意:
判断栈满的条件
入栈的top是先加还是后加
class ArrayStack {
private int maxsize;// 栈的大小
private int top = -1;// top表示栈顶,初始化为-1
private int stack[];// 数组,数组模拟栈,数据就放在该数组
// 构造器
public ArrayStack(int maxsize) {
//maxsize = this.maxsize;
this.maxsize = maxsize;
stack = new int[maxsize];
}
// 初始化栈
// 栈满
public boolean isFull() {
return top == maxsize - 1;
}
// 栈空
public boolean isEmpty() {
return top == -1;// 栈最开始就是空的,所以当top=-1
}
// 入栈
public void push(int value) {
// 判断栈是否满
if (isFull()) {
System.out.println("栈已经满了,没办法入栈!!");
return;
}
top++;// 要在前面加
stack[top] = value;
// top++;不能在后面加
//System.out.printf("top的值为:%d\n",top);
}
// 出栈,将栈顶的数据返回
public int pop() {
// 判断栈是否为空
if (isEmpty()) {
// System.out.println("栈已经空了,没法出栈了!!");
// 这里可以输出,也可以写一个异常
throw new RuntimeException("栈是空的");
}
int temp = stack[top];
top--;
return temp;
}
// 显示栈的情况,是从上到下遍历,从栈顶开始
public void showStack() {
//
if(isEmpty()) {
System.out.println("栈里为空");
return;
}
for(int i = top;i>=0;i--) {
System.out.println(stack[i]);
}
}
}