判断元素入栈 出栈的合法性:
验证进栈出栈的合法性---每次取栈顶元素,因为出栈的时候先进后出,每次出栈的总是栈顶元素,栈顶元素和另一个数组进行对比,如果相等就pop



//判断元素入栈 出栈的合法性
//验证进栈出栈的合法性---每次取栈顶元素,因为出栈的时候先进后出,每次出栈的
//总是栈顶元素,栈顶元素和另一个数组进行对比,如果相等就pop
#include<stack>
#include<assert.h>
template<class T>
bool CheckStack(const T *sPush, const T *sPop, size_t sizein, size_t sizeout)
{
assert(sPush && sPop);
assert(sizein && sizeout);
if (sizein != sizeout)//如果两个大小都不同,肯定是错的
return false;
stack<T> s;
int i = 0;
int j = 0;
for (i = 0; i < sizein; i++)
{
s.push(sPush[i]);//一个一个的进行入栈
while (j<sizeout)
{
//如果s.top()元素和sPop[j]相等,那么就pop,sPop指向下一个元素
if (!s.empty() && s.top() == sPop[j])
{
s.pop();
j++;
}
else
{
break;
}
}

}
if (!s.empty())
{
return false;
}
else
return true;
}

void TestCheckStack()
{
int a[] = { 1, 2, 3, 4, 5 };
int b[] = { 4, 5, 3, 2, 1 };
size_t sizein = sizeof(a) / sizeof(a[0]);
size_t sizeout = sizeof(a) / sizeof(a[0]);
cout << CheckStack(a, b, sizein, sizeout) << endl;
}