什么是栈:
“栈又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。
栈的特点:
- 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]); } } }