问题 D: 进出栈
题目描述:设栈S的初始状态为空,元素a, b, c, d, e, f, g 依次入栈,给你一个出栈序列,请编程判断出栈序列是否正确。
输入:占一行,为出栈序列。
输出:如果出栈序列是可能的,输出True,否则输出False。
样例输入:
a b c d e f g
样例输出:
True
#include<iostream>
#include<stack>
using namespace std;
stack<char> s;
int seq(char a[],char b[])
{
int j=0;
char x;
for(int i=0;i<7;i++)
{
s.push(a[i]);
while(!s.empty()&&s.top()==b[j])
{
j++;
s.pop();
}
}
if(s.empty())
{
return 1;
}
if(!s.empty())
{
return 0;
}
}
/*主要思路:如果栈非空且栈顶元素等于出栈序列元素就出栈,元素边入栈边判断能否出栈。
最终所有元素都入栈以后,还有元素不能出栈,说明出栈序列非法。*/
int main()
{
char a[7]={'a','b','c','d','e','f','g'};
char b[7];
for(int i=0;i<7;i++)
{
cin>>b[i];
}
if(seq(a,b)==1) cout<<"True";
if(seq(a,b)==0) cout<<"False";
}
问题E:栈容量
题目描述:设栈S的初始状态为空,元素a,b,c,d,e,f,g依次入栈,出栈顺序为b,d,c,f,e,a,g那么栈容量至少应该是3。如果任意给你一个出栈序列,你能编程判断相应的栈容量至少是多少吗?
输入:元素a,b,c,d,e,f,g依次入栈情况下的一种出栈序列。
输出:对应出栈序列的栈容量至少是多少。
样例输入:b d c f e a g
样例输出:3
#include<iostream>
#include<stack>
using namespace std;
stack<char>s;
int size(char a[], char b[])
{
int j=0;
int maxsize=0;
for(int i=0;i<7;i++)
{
s.push(a[i]);
if(s.size()>maxsize)
{
maxsize=s.size();
}
while(!s.empty()&&s.top()==b[j])
{
s.pop();
j++;
}
}
return maxsize;
}
int main()
{
char a[7]={'a','b','c','d','e','f','g'};
char b[7];
for(int i=0;i<7;i++)
{
cin>>b[i];
}
cout<<size(a,b);
}