9.6栈(stack)

本文介绍了栈的基本概念,如后进先出(LIFO)的工作原理,以及栈在调整数据顺序中的应用。此外,详细讲解了STL中的栈使用方法,包括stack容器的定义、常用操作函数和注意事项。
摘要由CSDN通过智能技术生成

1.什么是栈?

栈(stack)和队列(queue)都是一种线性的数据结构,但访问受限。对栈来说,限定在一端来插入和删除结点,这一端称为栈顶,如下图所示,另一端称为栈底。因此,先进入栈的结点往往后出来,这就是所谓的“后进先出(LIFO, Last In, First Out)”。另外,结点的插入,称为压栈或入栈(push);结点的删除,称为出栈(pop)

日常生活中,超市存放购物车的轨道, 往往一端是靠墙,只能从另一端放和取购物车,这时这个轨道就是一个栈

2.栈有什么用?

数据结构是一个容器,是用来存放结点的。结点一般是随着数据处理的进行,逐步按顺序插入进来的,如果需要调整这些结点出去的顺序,就可能需要用到栈

考虑往栈中按顺序插入23、17、45、19这4个结点,我们可以通过调整入栈和出栈操作的顺序,得到不同的出栈结点序列。例如:
①push23; push17; pop; pop; push45; pop; push19; pop。这4个结点的出栈顺序为17,23,45,19
②push23; pop; push17; push45; pop; push19; pop; pop。这4个结点的出栈顺序为23,45,19,17

注意,栈不能做到任意调整结点的出栈顺序。例如,在上面的例子里,“45 23 17 19”这样的出栈顺序是不可能的

3.STL中的栈

要使用STL中的栈,必须包含头文件<stack>,并使用std命名空间

定义栈的方法:
stack<char> S1;  //栈中的结点为字符
stack<int> S2;  //栈中的结点为整型数据
stack<pos> S3;  //栈中的结点为自定义结构体pos变量

stack常用的成员函数有:
①push:压栈,参数为需要压入栈的结点
②pop:出栈,返回值为出栈的结点
③top:取得栈顶结点,返回值为栈顶结点,该操作并不会弹出栈顶结点
④empty:判断栈是否为空,返回值为bool型
⑤size:返回栈中结点的个数

注意,当栈为空的时候,如果执行pop()操作,会造成Run Time Error(RTE),而且这种错误在用样例数据测试时不易发现。因此,在执行pop()操作时,可以先用empty()函数检测一下,栈不为空才执行pop()操作 

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值