我想知道是否有办法检查堆栈中是否存在元素。 假设堆栈接口有push,pop,isEmpty,getTop,成员函数。
我知道我们可以做到,如果我们得到顶部,将它与该元素进行比较并弹出它,直到它变空。但是这种方法很省,因为我们必须创建另一个堆栈来存储弹出元素并再次恢复它。
答案 0 :(得分:2)
这是一个检查元素是否在堆栈中的方法的伪代码:
template<class T>
bool find (stack<T> source, T value)
{
while (!source.isEmpty() && source.top() != value)
source.pop();
if (!source.isEmpty())
return true;
return false;
}
源堆栈按值传递至关重要,因此不会对其进行修改。另外,要意识到这个解决方案可能不如使用不同于堆栈的容器那样有效,只是调用一个检查值的方法。