void NonRecurFunction(DATATYPE data)
{
stack<DATATYPE> s;
while (ExistHandyWork(data) || !s.empty()) //存在手头工作或者存在待完成工作
{
while (ExistHandyWork(data)) //存在手头工作
{
s.push(data); //将手头工作保存为待完成工作
process(data); //访问节点,如果需要的话
data = NewHandyWork(data); //产生新的手头工作
}
if (!s.empty()) //存在待完成工作
{
data = s.top();
s.pop(); //出栈
process(data); //访问节点,如果需要的话
data = NewHandyWork(data); //产生新的手头工作
}
}
}