2013-11-21 6 views
0

Я хотел бы знать, есть ли способ проверить, существует ли элемент в стеке или нет. Предположим, что интерфейс стека имеет функции push, pop, isEmpty, getTop, member.Проверка наличия элемента в стеке

Я знаю, что мы можем это сделать, если мы получим верх, сравним его с этим элементом и поп его, пока он не станет пустым. Но этот метод был бы дорогостоящим, так как нам нужно было бы создать еще несколько стеков для хранения всплывающих элементов и снова восстановить их.

+1

Вам потребуется помощь либо дополнительного времени O (n), либо O (n). –

+5

Если вы можете это сделать, это не просто стек. – kennytm

ответ

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

Очень важно, чтобы стек источника передается по значению, так что она не изменяется , Кроме того, поймите, что это решение, вероятно, не так эффективно, как использование другого контейнера, чем стек, и просто вызывает метод, который проверяет значение.

+0

Спасибо. Не возражаете, если я использовал ваш код в другом вопросе :)? – user2878007

Смежные вопросы