输入一序列的元素,判断另一列元素是否符合栈的“先进后出”性质
#include<iostream>
#include <assert.h>
#include <stack>
using namespace std;
bool Check(int *stack_in, int *stack_out,int len_in,int len_out)
{
assert(stack_in && stack_out);
if (len_in != len_out) //两序列长度相等
return false;
stack<int> s;
int j = 0;
int i = 0;
for ( ; i < len_in; i++)
{
s.push(stack_in[i]);
while (s.size() > 0 && s.top() == stack_out[j]) //入栈序列栈顶元素与当前出栈序列元素相等,出栈
{
s.pop();
j++;
}
}
return (s.size()>0) ?false:true; //当所有出栈序列元素都匹配完之后,栈应为空
}
int main()
{
int stack_in[] = { 1, 2, 3, 4, 5 }; //入栈序列
int stack_out[] = { 4, 5, 3, 2, 1 }; //出栈序列
int len_in = sizeof(stack_in) / sizeof(stack_in[0]); //入栈序列长度
int len_out = sizeof(stack_out) / sizeof(stack_out[0]); //出栈序列长度
bool ret = Check(stack_in, stack_out,len_in,len_out);
if (ret)
cout << "yes" << endl;
else
cout << "no" << endl;
system("pause");
return 0;</