今天我给大家出一套C++语法-数据类型-栈stack考题
限时1小时,大家加油!!!
题目1:栈.选择题
单选题1
某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从 这一时刻开始的出入记录为:“进,出,进,进,进,出,出,进,进,进,出, 出”。假设车辆入站的 顺序为 1,2,3,...,则车辆出站的顺序为:
- A. 1, 2, 3, 4, 5
- B. 1, 4, 3, 7, 6
- C. 1, 4, 3, 7, 2
单选题2
设栈 S 和队列 Q 的初始状态为空,元素 e1,e2,e3,e4,e5,e6 依次通过栈 S,一个元素出栈后即进入队列 Q,若出队的顺序为 e2 ,e4 ,e3,e6 ,e5 ,e1 ,则栈 S 的容量至少应该为:
- A. 2
- B. 3
- C. 4
- D. 5
题目2:引例栈
题目描述
现在输入一串非负整数,每个正整数 x 表示 push(x) 操作;每个 0 表示一个 pop() 操作,要求输出栈顶元素,如果这时栈是空的,就输出 -1。
输入格式
第 1 行: 1 个正整数 N 范围在 [1,100000]。
第 2 行: N 个非负整数,表示题目中所述的操作。
输出格式
一行,多个整数,表示题目中所述的操作的输出结果。
样例
输入数据 1
8
2 3 0 4 0 0 0 5
输出数据 1
3 4 2 -1
程序填空
#include<bits/stdc++.h>
using namespace std;
int n;
stack <int> a;
int main()
{
cin>>n;
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(x==0)
{
if( 填空(1) >0)
{
printf("%d ", 填空(2) );
填空(3) ;
}
else
printf("-1 ");
}
else
填空(4) ;
}
return 0;
}
填空(1)
填空(2)
填空(3)
填空(4)
题目3:栈引例表达式求值(noip2013普及)
题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入格式
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 “+” 和乘法运算符 “*” ,且没有括号,所有参与运算的数字均为 0 到 2^31 -1 之间的整数。输入数据保证这一行只有 0~ 9、+、*这 2 种字符。
数据范围
对于 30% 的数据,0 ≤ 表达式中加法运算符和乘法运算符的总数 ≤ 100;
对于 80%的数据,0 ≤ 表达式中加法运算符和乘法运算符的总数 ≤ 1000;
对于 100%的数据,0 ≤ 表达式中加法运算符和乘法运算符的总数 ≤ 100000。
输出格式
输出只有一行,包含一个整数,表示这个表达式的值。 注意: 当答案长度多于 4 位 时,请只输出最后 4 位 , 前导 0 不输出。
样例
输入数据 1
1+1*3+4
输出数据 1
8
输入数据 2
1+1234567890*1
输出数据 2
7891
输入数据 3
1+1000000003*1
输出数据 3
4
样例解释
样例 1 计算的结果为 8,直接输出 8。
样例 2 计算的结果为 1234567891,输出后 4 位,即 7891。
样例 3 计算的结果为 1000000004,输出后 4 位,即 4。
程序填空
#include<bits/stdc++.h>
using namespace std;
stack <int> s;
int main()
{
char c;
int num,ans=0;
cin>>num;
num = num % 10000;
填空(1)
while(cin>>c>>num)
{
if(c=='*')
{
num = 1ll* 填空(2) *num%10000;
填空(3) ;
}
else
num = num%10000;
填空(4) ;
}
while(!s.empty())
{
ans += 填空(5) ;
ans = ans%10000;
填空(6) ;
}
printf("%d",ans);
return 0;
}
填空(1)
填空(2)
填空(3)
填空(4)
填空(5)
填空(6)
题目4:应用栈
题目描述
现在输入一串非负整数,每个正整数 x 表示 push(x)操作;每个 0 表示一个 pop()操作,要求输出栈顶元素,如果这时栈是空的,就输出-1。
输入格式
第一行 1 个正整数 N 范围在[1,100000]。
第二行 N 个非负整数,表示题目中所述的操作。
输出格式
一行,多个整数,表示题目中所述的操作的输出结果。
样例
输入数据 1
8
2 3 0 4 0 0 0 5
输出数据 1
3 4 2 -1
题目1答案:
代码
'1': B
'2': B
题目2答案:
代码
'1': a.size()
'2': a.top()
'3': a.pop()
'4': a.push(x)
题目3答案:
代码
'1': s.push(num)
'2': s.top()
'3': s.pop()
'4': s.push(num)
'5': s.top()
'6': s.pop()
题目4答案:
代码
#include<bits/stdc++.h>
using namespace std;
int n;
stack <int> a;
int main()
{
cin>>n;
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
if(x==0)
{
if( a.size() >0)
{
printf("%d ", a.top());
a.pop() ;
}
else
printf("-1 ");
}
else
a.push(x);
}
return 0;
}