栈的简单理解

栈的理解

栈的操作特性只允许在栈顶插入和删除数据。特征就是先进后出。

基于数组实现的顺序栈
public class ArrayStack{
    private String[] items;	//数组
    private int count;		//栈中的元素个数
    private int n;			//栈的大小
    
	public ArrayStack(int n){
    	this.items=new String[n];
    	this.count=0;
    	this.n=n;
	}
    
	public boolean push(String item){
    	if (count==n) //空间不够入栈失败
        	return false; 
    	item[count]=item;  //将item放到下标为count的位置 并且count+1
    	++count;
    	return true;
    	}
    
    public boolean pop(){
    	if (count=0) 
    	return null;
    	String tmp=item[count-1];
    	--count;
    	return true;
	}
}

栈在函数调用的应用

操作系统给每个线程分配一块独立的内存空间,被组织成’栈’用来存储函数调用时的临时变量

在调用过程中,每调用一个新的函数,编译器就会将被调用函数的临时变量封装为栈帧并压入栈,当被调用函数执行完毕并返回后,

编译器就会将这个函数对应的栈帧弹出栈。

栈在表达式求值的应用

对于简单的表达式 包括加减乘除的四则运算人脑可以简单的算出,但是计算机理解起来就不这么简单。

通常编译器是通过两个栈来实现表达式的求值,一个栈用来保存操作数,一个用来保存运算符。

在运算过程中 从左到右遍历表达式,遇到数字就压入操作数栈,遇到运算符

我们就会把遇到的运算符和运算符栈栈顶的运算法优先级进行比较,当前遇到的运算符优先级高的话,我们就把运算符压入栈

否则 我们就我们从运算符栈取出运算法 从操作数栈取出两个操作数,进行计算,并把结果压入操作数栈里面,然后继续比较这个运算符和栈顶运算符的优先级。

实现浏览器的前进和后退

创建两个栈 X,Y 首先把浏览的页面依次压入栈内

单击后退的时候 把x栈顶的数据取出压入y中,再次单击前进的时候 把y栈顶的数据取出来压入x中

当 x栈中没有数据的时候表示没有数据通过点击后退按钮进行浏览了,当y栈没有数据的时候表示没有数据通过单击前进进行浏览了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值