栈与队列相关

栈(stack)是一种数据结构,存储以及查找数据只能访问栈的顶端,每次存入都放在栈的最顶端,故后进先出(Last in First out / LIFO)

只能在栈顶进行入栈出栈操作。

栈适用于数据存储后以相反的顺序来检索的情况。

栈的一个应用是在程序中匹配分隔符。( ) [ ] { } /* */
分隔符可以嵌套使用,只有一个分隔符以及与其匹配的分隔符之间的所有分隔符匹配,这个分隔符才匹配。
还有数制转换、括号匹配的检验、行编辑程序、迷宫求解、表达式求值、栈与递归的实现。

有基于数组的栈和基于单链表的栈,通过stack适配器实现,底层仍为标准库容器,默认情况下deque为底层容器。
栈提供的操作:

s.empty(); //如果栈为空则返回true, 否则返回false;
s.size(); //返回栈中元素的个数
s.top(); //返回栈顶元素, 但不删除该元素
s.pop(); //弹出栈顶元素, 但不返回其值 s.push(); //将元素压入栈顶

队列(queue)是一种两端结构,一端用来加入新元素,另一端用来删除元素。队列总是先进先出(First in First out / FIFO
主要应用:排队相关问题

有基于数组的队列和基于链表的适配器,在c++中同样以queue适配器实现,默认情况下其底层容器为deque,也可选择list容器实现。由于pop( )是通过pop_front实现的,故不能使用vector容器。
队列提供的操作:
q.empty(); //如果队列为空返回true, 否则返回false
q.size(); //返回队列中元素的个数
q.front(); //返回队首元素但不删除该元素
q.pop(); //弹出队首元素但不返回其值
q.push(); //将元素压入队列
q.back(); //返回队尾元素的值但不删除该元素

优先队列(priority_queue)默认用vector容器实现,priority_queue容器总是把优先级最高的元素放在队列的最前方以维持队列的顺序。

当以 < 排序时元素的值越大优先级越高。

优先队列提供的操作:

s.empty(); // 如果优先队列为空,返回真
s.pop(); // 删除第一个元素
s.push(x); // 添加一个元素x
s.size(); // 返回优先队列中拥有的元素的个数
s.top(); // 返回优先队列中有最高优先级的元素

双端队列(double-ended queue)时允许在两端访问的线性表,可以在两端增加、删除元素,结合栈和队列(栈在一端增删元素,队列一端增一端删),通俗讲,栈和队列可通过双端队列阉割功能实现;还可以随机访问双端队列的任何位置,结合向量和链表的功能。

由于链表只能顺序访问,迭代器只能使用自增和自减,但是双端队列支持随机访问,其迭代器可以增加范围内任何数字,支持迭代器的算术运算。

双端队列支持的操作:
s.assign( iterator , iterator ); //删除所有元素,然后将迭代器first和last指示范围中的元素插入该队列中
s.assign( n , value); // 删除所有元素,然后插入n个value的副本
s.at(); //返回双端队列的某位置的元素
s.back(); //返回最后一个元素
s.begin();
s.clear();
s.empty();
s.erase();
s.front();
s.insert(iterator , n ,value);
s.insert(iterator1 , iterator2 ,iterator3) //iterator1 - iterator2的左半闭区间的值拷贝插入从iterator的位置,返回第二个iterator2
s.pop_front();
s.pop_back();
swap();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值