【数据结构详解】栈

栈是什么

栈就是一个先进先出的线性表,若能够更加方便地去理解栈,我们可以跟剧具体的图来进行理解.
栈容器示意图
相信这个图十分的生动形象,可以看出栈就像是一个桶,若每一个元素进栈的时候,便会存储在最底下,后来的会在上面;而如果需要取出元素,那么必须从最上面开始取,先放的便只能后来取,后放的便只能先取,因此栈的特点便是:先进后出,后进先出.


如何模拟并存储栈的操作

为了方便,我们需要用数组去模拟栈的序列.即:
栈的模拟
我们定义数组和变量来表示栈,即:
Stack表示栈的序列,top代表栈的元素个数,那么自然:
Stack[1]表示栈的底部,stack[top]表示栈顶.那么,如图(c),a,b,c,d,e分别表示Stack[1,2,3,4,5].


添加与删除栈内的元素

添加元素

我们只需要用在顶端放上元素即可,设需要存储的元素为k,即:

top++;
Stack[++top]=k;
删除元素

去掉栈顶元素,其实只需要将元素个数减去1就可以,并不需要要去掉的元素重新赋值为0,因为若要重新插入元素,那么必然新的值会覆盖原来的值.因此只要一句简单的话就可以完成栈的操作:

top--;

栈的实际操作与运用

学习好栈并不只是学会简单的模拟和运用,还要更多地知道一道题为什么需要栈,需要栈来维护什么,这也是需要栈的原因.接下来会有一些实际的例题,可以更好地去理解栈的操作


火车进站

有一个车站,每天都会有N辆车进站,进站按从1到N的顺序进站。现在车站的站长想让这些火车按照特定的顺序出站,问可以做到吗?
当N为5时,出站顺序若为1 2 3 4 5,可以做到,但是顺序若为5 4 1 2 3,则不行。
火车进站图片
输入格式
一个N,在1000之内,下接一些出站序列,当读到一个0时,则这个测试数据结束。
输出格式
对每个序列输出一行“Yes”或“No”。
input
5
1 2 3 4 5
5 4 1 2 3
0
output
Yes
No
数据规模与约定
时间限制:1s
空间限制:256MB
这道题目其实难度并非很大,最主要的是模拟,需要用数据结构栈来模拟:
给定一个数列,和栈进行以此配对,即:用1,2,3,4,5进栈,若栈顶元素等于a[first],first表示未被匹配过的初始序列的开头,若匹配成功,则出栈,而匹配的序列也转移到下一个.最后便只要去判断栈是否为空即可.为空没说明匹配完,否则则说明没有匹配完,即该序列不成立

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值