65,186
社区成员




template <typename T>
void StackInOut<T>::simulateStack(std::vector<T>& originData, std::stack<T>& stackData, std::vector<T>& tempData)
{
if (originData.size() == 0 && stackData.size() == 0)
{
this->out_data.push_back(tempData);
return;
}
else if (originData.size() != 0 && stackData.size() == 0)
{
T tempT = originData.back();
originData.pop_back();
stackData.push(tempT);
simulateStack(originData, stackData, tempData);
}
else if (originData.size() ==0 && stackData.size() != 0)
{
tempData.push_back(stackData.top());
stackData.pop();
simulateStack(originData, stackData, tempData);
}
else
{
std::vector<T> tempBranchData = tempData;
std::vector<T> origionBranchData = originData;
std::stack<T> stackBranchData = stackData;
//出栈
tempData.push_back(stackData.top());
stackData.pop();
simulateStack(originData, stackData, tempData);
//入栈
T tempT = origionBranchData.back();
origionBranchData.pop_back();
stackBranchData.push(tempT);
simulateStack(origionBranchData, stackBranchData, tempBranchData);
}
}