一、题目

二、思路

准备入栈序列与出栈序列,一个空栈。
其中,入栈系列和出栈序列用vector存储,
其中,出栈序列我们用一个index指向首元素,来模拟队列。
然后元素12345按照顺序入栈。
元素1入栈后,需要判断他和出栈序列中,index指向的元素,也就是队列首元素3是否相同,
如果相同,则同时弹出栈顶元素和队头元素,
直到栈空或栈顶元素与队头元素不相同,
否则,继续将入栈序列中的元素入栈。
经过多轮操作,如果最终栈为空,
则说明出栈顺序合法;
否则不合法。
三、代码
bool validateStackSequence(vector<int>pushed/*入栈序列*/, vector<int>popped/*出栈序列*/)
{
//建立临时栈,用来判断栈顶元素和出栈队列首元素是否相同
stack<int> S;
//计数器,用于出栈序列,模拟队列
int index = 0;
//依次将入栈序列从头到尾入栈
for (int i = 0; i < pushed.size(); i++)
{
//入栈
S.push(pushed[i]);
//判断栈顶和队头是否相等
while (!S.empty() && popped[index] == S.top())
{
//如果相等,同时弹出栈顶元素与队列头部元素
//直到栈空或栈顶与队列头部元素不同
S.pop();//弹出栈顶元素
index++;//弹出队列头部元素
}
}
//栈为空,则说明合法。
if (S.empty())
{
return true;
}
return false;
}
int main()
{
vector<int>pushed;
vector<int>popped;
pushed.push_back(1);
pushed.push_back(2);
pushed.push_back(3);
pushed.push_back(4);
pushed.push_back(5);
popped.push_back(3);
popped.push_back(2);
popped.push_back(5);
popped.push_back(4);
popped.push_back(1);
cout << validateStackSequence(pushed, popped);
return 0;
}

本文介绍了一种使用栈来验证给定的入栈序列和出栈序列是否合法的方法。通过模拟入栈和出栈过程,利用栈顶元素与出栈序列首元素的比较,实现了序列合法性的校验。
1万+

被折叠的 条评论
为什么被折叠?



