一、栈(stack)

1.定义:

栈是一种只能在某一端插入和删除数据的特殊线性表。他按照先进先出的原则存储数据,先进的数据被压入栈底,最后进入的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后被压入栈的,最先弹出)。因此栈也称先进后出表。

允许进行插入删除操作的一端称为栈顶,另一端称为栈底。栈底固定,栈顶浮动。插入元素称为进栈,删除一个元素称为进栈,栈内元素为零称为空栈。

2.stack成员函数

bool empty ( ) ————>栈为空返回true,否则返回false;

void pop ( ) ————>删除栈顶元素,出栈;

void push(const TYPE&value)————> 插入新元素value,放置在栈顶进栈;TYPE:类型int,char…;

size_type size ( ) ————> 返回堆栈中元素个数;(注意注意!!!!切不可赋值给int ,很容易超过int的范围

TYPE&top()————> 查看当前栈顶元素;

Many areas of Computer Science use simple, abstract domains for both

analytical and empirical studies. For example, an early AI study of

planning and robotics (STRIPS) used a block world in which a robot arm

performed tasks involving the manipulation of blocks.

In this problem you will model a simple block world under certain

rules and constraints. Rather than determine how to achieve a

specified state, you will “program” a robotic arm to respond to a

limited set of commands.

The problem is to parse a series of commands that instruct a robot arm

in how to manipulate blocks that lie on a flat table. Initially there

are n blocks on the table (numbered from 0 to n − 1) with block bi

adjacent to block bi+1 for all 0 ≤ i < n − 1 as shown in the diagram

below:

Initial Blocks World

The valid commands for the robot arm that manipulates blocks are:

• move a onto b

where a and b are block numbers, puts block a onto block b after

returning any blocks that are stacked on top of blocks a and b to

their initial positions.

• move a over b

where a and b are block numbers, puts block a onto the top of the

stack containing block b, after returning any blocks that are stacked

on top of block a to their initial positions.

• pile a onto b

where a and b are block numbers, moves the pile of blocks consisting

of block a, and any blocks that are stacked above block a, onto block

b. All blocks on top of block b are moved to their initial positions

prior to the pile taking place. The blocks stacked above block a

retain their order when moved.

• pile a over b

where a and b are block numbers, puts the pile of blocks consisting of

block a, and any blocks that are stacked above block a, onto the top

of the stack containing block b. The blocks stacked above block a

retain their original order when moved.

• quit

terminates manipulations in the block world. Any command in which a =

b or in which a and b are in the same stack of blocks is an illegal

command. All illegal commands should be ignored and should have no

affect on the configuration of blocks.

Input

The input begins with an integer n on a line by itself representing

the number of blocks in the block world. You may assume that 0 < n <

25.

The number of blocks is followed by a sequence of block commands, one

command per line. Your program should process all commands until the

quit command is encountered. You may assume that all commands will be

of the form specified above. There will be no syntactically incorrect

commands.

Output

The output should consist of the final state of the blocks world. Each

original block position numbered i (0 ≤ i < n where n is the number of

blocks) should appear followed immediately by a colon. If there is at

least a block on it, the colon must be followed by one space, followed

by a list of blocks that appear stacked in that position with each

block number separated from other block numbers by a space. Don’t put

any trailing spaces on a line.

There should be one line of output for each block position (i.e., n

lines of output where n is the integer on the first line of input).

Sample Input

10

move 9 onto 1

move 8 over 1

move 7 over 1

move 6 over 1

pile 8 over 6

pile 8 over 5

move 2 over 1

move 4 over 9

quit

Sample Output

0: 0

1: 1 9 2 4

2:

3: 3

4:

5: 5 8 7 6

6:

7:

8:

9:

本以为这个题要用到stack,结果发现这个题Vector就能做!!!

2019/02/16 STL容器 :栈的更多相关文章

  1. 2019.02.16 spoj Query on a tree IV(链分治)

    传送门 题意简述: 捉迷藏强化版(带有边权,可以为负数) 思路:好吧这次我们不用点分树,我们用听起来更屌的链分治. 直接把树剖成若干条重链,这样保证从任意一个点跳到根节点是不会跳超过logloglog ...

  2. 2019.02.16 bzoj5466: [Noip2018]保卫王国(链分治+ddp)

    传送门 题意简述: mmm次询问,每次规定两个点必须选或者不选,求树上的带权最小覆盖. 思路: 考虑链分治+ddpddpddp 仍然是熟悉的套路,先考虑没有修改的状态和转移: 令fi,0/1f_{i, ...

  3. C++ STL 容器之栈的使用

    Stack 栈是种先进后出的容器,C++中使用STL容器Stack<T> 完美封装了栈的常用功能. 下面来个demo 学习下使用栈的使用. //引入IO流头文件 #include<i ...

  4. STL容器

    啦啦啦,今天听啦高年级学长讲的STL容器啦,发现有好多东西还是有必要记载的,毕竟学长是身经百战的,他在参加各种比赛的时候积累的经验可不是一天两天就能学来的,那个可是炒鸡有价值的啊,啊啊啊啊啊 #inc ...

  5. c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  6. STL容器的本质

    http://blog.sina.com.cn/s/blog_4d3a41f40100eof0.html 最近在学习unordered_map里面的散列函数和相等函数怎么写.学习过程中看到了一个好帖子 ...

  7. 关于STL容器

    容器: 概念:如果把数据看做物体,容器就是放置这些物体的器物,因为其内部结构不同,数据摆放的方式不同,取用的方式也不同,我们把他们抽象成不同的模板类,使用时去实例化它 分类: 序列容器.关联容器.容器 ...

  8. STL 容器简介

    一.概述 STL 对定义的通用容器分三类:顺序性容器.关联式容器和容器适配器. 顺序性容器是一种各元素之间有顺序关系的线性表.元素在顺序容器中保存元素置入容器时的逻辑顺序,除非用删除或插入的操作改变这 ...

  9. STL 容器的概念

    STL 容器的概念 在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要. 经典的数据结构数量有限,但是我们 ...

随机推荐

  1. ubuntu18.04配置宽带上网

    1.将 /etc/NetworkManager 目录下的 managed标签改为true 2.将 /etc/network/ 目录下的 interfaces文件只留下前两行: auto lo ifac ...

  2. 使用webview查找元素,appium查找web页面元素

    9 webview查找元素 9.1 webview 简介 WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面.它使用的内核是webkit引擎,4.4版本之后,直接使用 ...

  3. coding++:漫画版-了解什么是分布式事务?

    —————  第二天  ————— ———————————— 假如没有分布式事务: 在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子: 上图中包含了库存 ...

  4. 多线程高并发编程(3) -- ReentrantLock源码分析AQS

    背景: AbstractQueuedSynchronizer(AQS) public abstract class AbstractQueuedSynchronizer extends Abstrac ...

  5. java nio消息半包、粘包解决方案

    问题背景 NIO是面向缓冲区进行通信的,不是面向流的.我们都知道,既然是缓冲区,那它一定存在一个固定大小.这样一来通常会遇到两个问题: 消息粘包:当缓冲区足够大,由于网络不稳定种种原因,可能会有多条消 ...

  6. window 10 安装paddlepaddle 1.7 GPU版本

    window 10 安装paddlepaddle 1.7 GPU版本 1)更新显卡驱动 2)安装cuda 10 https://developer.nvidia.com/cuda-10.0-downl ...

  7. C语言 贪吃蛇

    贪吃蛇(单人版): 本人先来介绍一个函数 -- bioskey函数: int bioskey (int cmd) 参数 (cmd) 基本功能 0 返回下一个从键盘键入的值(若不键入任何值,则将等下一个 ...

  8. 中间人攻击-Arp之局域网内DNS欺骗

    基础知识 网关是啥? 网关是工作在OSI七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,网关就好比一个房间通向另一个房间的一扇门. ARP协议 假设A(192.168.1.2)与B(1 ...

  9. 一年时间,Pipenv就成为Python官方推荐的顶级工具?

    Pipenv是Kenneth Reitz在一年多前创建的“面向程序员的Python开发工作流程”,现在已成为管理软件包依赖关系的Python官方推荐资源. Python软件包安装管理的简要历史 为了正 ...

  10. anaconda 使用conda命令创建虚拟环境

    1.首先在所在系统中安装Anaconda.可以打开命令行输入conda -V检验是否安装以及当前conda的版本. 2.conda常用的命令. 1)conda list 查看安装了哪些包. 2)con ...