Description

TonyY 是一个 word 小白,今天他对 word 中撤销和恢复功能特别感兴趣,玩耍了一个上午(mdzz~) ,现在他知道了它们的功能和快捷键:撤销:ctrl+z,可以撤销最近 1 次之前的恢复和 input 操作。恢复:ctrl+y,可以恢复最近 1 次之前的撤销操作,但是 input 操作之前的撤销操作不能被恢复。当然,TonyY 还要往里写东西,操作格式为 input str(长度 m 1=<m<=30) 。现在他对 word 玩耍了起来,想知道玩耍完的结果,你可以帮助他吗?

Input

输入第一行为一个正整数 n(0<=n<=10000) ,表示 TonyY 的操作次数。接下来 n 行,为上述的操作之一。其中可能有不合法操作,直接跳过即可。

Output

输出 word 中的内容,字符串间用空格隔开,如果 word 为空,输出”No output”

Sample Input

4input actrl+zctrl+yinput b5input ainput bctrl+zinput dctrl+y

Sample Output

a b
a d

思路

一开始一直去模拟这个过程,写到最后自己都乱掉了,其实仔细思考一下就会发现其中逻辑很简单,撤销操作是对恢复与input生效的,那么只要输入保存字符串的栈不为空,那么我就可以实行撤销操作,因为保存字符串的栈中的字符串要么是input得到的,要么是恢复得到的。而对于恢复操作,只要判断一下保存撤销的字符串的栈是否为空就好了,不为空就能恢复。另外对于input之前的撤销操作不能恢复,因此,只要在每次输入的时候,清空保存撤销的字符串的栈就好了。
#include<iostream>
#include<string>
#include<stack>
#include<cstdio>
using namespace std;
const int maxn = 10005;
int main()
{
	int N,i;
	stack<string>kstr,tmp;
	string opt,str,a[maxn];
	scanf("%d",&N);
	while (N--)
	{
		cin >> opt;
		if (opt[0] == 'i')
		{
			cin >> str;
			kstr.push(str);
			while (!tmp.empty())
			{
				tmp.pop();
			}
		}
		else if (opt[5] == 'z')
		{
			if (!kstr.empty())
			{
				tmp.push(kstr.top());
				kstr.pop();
			}
		}
		else if (opt[5] == 'y')
		{
			if (!tmp.empty())
			{
				kstr.push(tmp.top());
				tmp.pop();
			}
		}
	}
	int cnt = 0;
	while (!kstr.empty())
	{
		a[cnt++] = kstr.top();
		kstr.pop();
	}
	if (!cnt)
	{
		printf("No output\n");
	}
	else
	{
		for (i = cnt - 1;i >= 0;i--)
		{
			i?cout << a[i] << " " :cout << a[i];
		}
		cout << endl;
	}
	return 0;
}

  

数据结构作业——word(栈)的更多相关文章

  1. javascript数据结构与算法---栈

    javascript数据结构与算法---栈 在上一遍博客介绍了下列表,列表是最简单的一种结构,但是如果要处理一些比较复杂的结构,列表显得太简陋了,所以我们需要某种和列表类似但是更复杂的数据结构---栈 ...

  2. JavaScript数据结构和算法----栈

    前言 栈是一种遵循后进先出(LIFO)原则的有序集合,新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另外一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底.可以想象桌上的一叠书,或者厨房里的 ...

  3. 数据结构学习之栈求解n皇后问题

    数据结构学习之栈求解n皇后问题 0x1 目的 ​ 深入掌握栈应用的算法和设计 0x2 内容 ​ 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后 ...

  4. Javascript数据结构与算法--栈的实现与用法

    栈数据结构 栈是一种遵从后进先出(LIFO)原则的有序集合.新添加的或者待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底. 我们在生活中常能看到栈的 ...

  5. JavaScript数据结构与算法-栈练习

    栈的实现 // 栈类 function Stack () { this.dataStore = []; this.top = 0; // 栈顶位置 相当于length,不是索引. this.push ...

  6. SDUT 2133 数据结构实验之栈三:后缀式求值

    数据结构实验之栈三:后缀式求值 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 对于一个基于二元运算符的后缀表示式(基本操作数都是 ...

  7. SDUT OJ 1479 数据结构实验之栈:行编辑器

    数据结构实验之栈:行编辑器 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  一个简单的行编辑程序的功能是:接受用户从终端输入的程 ...

  8. javascript数据结构与算法——栈

    前言: 栈就是和列表类似的一种数据结构,不过栈的特点是'后人先出'.栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样操作很快,而且容易实现. 1. 栈的介绍: 栈是一种特殊的列表,栈内的 ...

  9. SDUT-2088_数据结构实验之栈与队列十一:refresh的停车场

    数据结构实验之栈与队列十一:refresh的停车场 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description refresh最近发 ...

随机推荐

  1. Qt学习笔记 TableWidget使用说明和增删改操作的实现

    看一下效果很简单的一个小功能 先说分部讲一下过程 再给出详细代码 添加数据 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ...

  2. 前端手札--meta标记篇

    通用类: 声明编码 <meta charset='utf-8' /> SEO页面关键词 <meta name="keywords" content="y ...

  3. [转]linux 系统监控、诊断工具之 IO wait

    1.问题: 最近在做日志的实时同步,上线之前是做过单份线上日志压力测试的,消息队列和客户端.本机都没问题,但是没想到上了第二份日志之后,问题来了: 集群中的某台机器 top 看到负载巨高,集群中的机器 ...

  4. Linux vmstat命令实战详解

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...

  5. How to build windows azure PowerShell Source Code

    Download any version source code of Windows Azure Powershell from https://github.com/Azure/azure-sdk ...

  6. 关于Hellas和Greece

    一直以来我就好奇,为什么希腊的中文名字“希腊”和英文名字”Greece”听起来都不像(就像“德国”不像“Germany”一样),而且,为什么在很多体育比赛中看到希腊运动员的衣服上都是“Hellas”, ...

  7. C# WinForm应用程序降低系统内存占用方法

    这里整理了一些网上关于Winform如何降低系统内存占用的资料,供参考: 1.使用性能测试工具dotTrace 3.0,它能够计算出你程序中那些代码占用内存较多2.强制垃圾回收3.创建完对象实例后,记 ...

  8. Android之Activity启动模式

    正常模式 每个应用都有一个任务栈,任务栈中保存着已创建的Activity,先创建的Activity先入栈,栈顶是当前正在显示的activity(running),这是正常模式下的Activity的管理 ...

  9. javascript 函数声明与函数表达式的区别

    先看一段代码 var f = function g() { return 1; }; if (false) { f = function g(){ return 2; }; } alert(g()); ...

  10. hibernate防止sql注入对参数赋值传参数的例子

    来源于:https://my.oschina.net/u/1754093/blog/707083 1.按参数名称绑定 在HQL语句中定义命名参数要用":"开头,形式如下: Quer ...