赞
踩
栈就是一个先进先出的线性表,若能够更加方便地去理解栈,我们可以跟剧具体的图来进行理解.
相信这个图十分的生动形象,可以看出栈就像是一个桶,若每一个元素进栈的时候,便会存储在最底下,后来的会在上面;而如果需要取出元素,那么必须从最上面开始取,先放的便只能后来取,后放的便只能先取,因此栈的特点便是:先进后出,后进先出.
为了方便,我们需要用数组去模拟栈的序列.即:
我们定义数组和变量来表示栈,即:
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表示未被匹配过的初始序列的开头,若匹配成功,则出栈,而匹配的序列也转移到下一个.最后便只要去判断栈是否为空即可.为空没说明匹配完,否则则说明没有匹配完,即该序列不成立.代码很好实现.
代码如下:
#include<bits/stdc++.h>
using namespace
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。