检查堆栈中是否存在元素

时间:2013-11-21 19:05:32

标签: c++ algorithm search stack

我想知道是否有办法检查堆栈中是否存在元素。 假设堆栈接口有push,pop,isEmpty,getTop,成员函数。

我知道我们可以做到,如果我们得到顶部,将它与该元素进行比较并弹出它,直到它变空。但是这种方法很省,因为我们必须创建另一个堆栈来存储弹出元素并再次恢复它。

1 个答案:

答案 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;
}

源堆栈按值传递至关重要,因此不会对其进行修改。另外,要意识到这个解决方案可能不如使用不同于堆栈的容器那样有效,只是调用一个检查值的方法。