数据结构: 栈

1.概念

栈是一种后进先出(Last In, First Out,LIFO)的数据结构,这意味着最后加入栈的元素最先被移除。我们可以将栈想象成一个垂直的容器,像是一叠盘子,新的盘子总是放在最上面,取盘子时也是从最上面的开始。

2.栈的基本操作

  1. 入栈(Push):将元素压入栈顶。
  2. 出栈(Pop):将栈顶元素移除并返回。
  3. 窥视(Peek 或 Top):返回栈顶元素但不移除它。
  4. 判空(IsEmpty):检查栈是否为空。

3.简单实现

template<class T, class Container = vector<T>>
class Stack
{
public:
    Stack() {}
    size_t size(){return s.size();}
    bool empty() {return s.empty();}
    void push(const T& x = T()) {s.push_back(x);}
    void pop(){return s.pop_back();}
    T& top() {return s.back();}
    const T& top() const{return s.back();}
    
private:
    Container s;
};

4.使用场景

栈在许多算法和计算中都扮演着关键角色,以下是一些常见的应用场景:

  1. 表达式求值:包括中缀表达式转换为后缀表达式,以及后缀表达式求值。
  2. 括号匹配:用于检查表达式中的括号是否成对匹配。
  3. 函数调用栈:在程序运行时,用于存储函数调用信息,实现递归。
  4. 浏览器的前进后退功能:通过两个栈来实现浏览历史的前进和后退。
    • 后退操作:当用户点击后退按钮时,当前页面被压入前进栈,从后退栈弹出一个页面并显示。
    • 前进操作:当用户点击前进按钮时,当前页面被压入后退栈,从前进栈弹出一个页面并显示。
    • 新页面加载:当用户访问一个新页面时,清空前进栈,并将当前页面压入后退栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值