1.栈的主要规则
先进先出
2.栈的主要用途
1.子程序的调用,在跳出子程序前,会将下个指令的地址存出到堆栈当中,直到子程序执行完毕后再将地址取出,以后到原来的程序中。
2.处理递归调用,和子程序的调用类似,只是除了存储下一个指令的地址外,也将参数,区域变量等数据存入栈中
3.表达式的转换(中缀前缀后缀)重点
4.二叉树的遍历
5.图的深度优先搜索法。
3.栈的实现:
主体思路与实现:栈的实现与数组实现队列相似,相同点在于实现底层的数据结构都是数组,不同点在于实现时指针定义不同,队列需要两个指针但是栈实现只需要一个指针即top(指向钱顶的指针)指针。当入栈时只需要让top++即,出栈时只需要让top--即可
具体实现如下:
public class ArraysStackDemo { int top=-1;//栈顶指针 int[] stack;//栈数组 int maxsize;//数组最大长度 public ArraysStackDemo(int maxsize){ this.maxsize=maxsize; stack=new int[maxsize]; } public void push(int data){//入栈方法 if(maxsize-1==top){ System.out.println("栈已满,不可再次加入"); } top++; stack[top]=data; } public void pop(){//出栈方法 if (top==-1) { throw new RuntimeException("栈为空,不可取出~"); } System.out.println(stack[top--]); } public void print(){//栈遍历并打印 if(top==-1){ System.out.println("栈为空不可打印"); return; } for(int i=top;i>=0;i--){ System.out.print(stack[i]+"->"); } } }