栈的操作序列

题目描述

现有一个空栈s,按顺序执行n个操作序列,每个操作是下面的两种之一:

  1. 往s中压入一个正整数k
  2. 弹出s的栈顶元素,同时将其输出

输入描述

第一行一个整数n(1≤n≤100),表示操作序列的个数;

接下来n行,每行一个操作序列,格式为以下两种之一,分别对应入栈和出栈的操作,其中push k表示需要将整数k(1≤k≤100)压入栈,而pop表示需要弹出栈顶元素:

  1. push k
  2. pop

输出描述

输出多行,每次弹出时输出一行,表示弹出的栈顶元素。如果无法弹出栈顶元素,那么输出-1

样例1

输入

8 
push 2 
pop 
pop 
push 5 
push 3 
push 6 
pop 
pop

输出

2 -1 6 3

解释

初始时栈为空,即[]。接下来进行以下8个操作:

  1. push 2:将2入栈,此时栈为[2]
  2. pop:栈顶元素为2,因此输出2,弹出后栈为[]
  3. pop:由于栈空,无法弹出元素,因此输出-1
  4. push 5:将5入栈,此时栈为[5]
  5. push 3:将3入栈,此时栈为[5,3]
  6. push 6:将6入栈,此时栈为[5,3,6]
  7. pop:栈顶元素为6,因此输出6,弹出后栈为[5,3]
  8. pop:栈顶元素为3,因此输出3,弹出后栈为[5]
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
	cin>>n;
	stack<int> s;
	string str;
	int x;
	while(n--){
		cin>>str;
		if(str == "push"){
			cin>>x;
			s.push(x);
		}
		else if(str == "pop"){
			if(s.empty()){
				cout<<-1<<endl;
			}
			else{
				cout<<s.top()<<endl;
				s.pop();
			}	
		}
	}
	return 0;
}

 错误代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int n;
	cin>>n;
	stack<int> s;
	string str;
	int x;
	while(n--){
		cin>>str>>x; //如果在此处就输入 x 的话,代码就完不成全部输入
		cin.ignore();
		if(str == "push"){
			s.push(x);
		}
		else if(str == "pop"){
			if(s.empty()){
				cout<<-1<<endl;
			}
			else{
				cout<<s.top()<<endl;
				s.pop();
			}	
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值