2013-07-07 3 views
0

Мне нужно проверить, является ли элемент частью стека. Вот функция, которую я написал:Проверьте, является ли элемент частью стека

template<class T> 
    bool CheckElem(Stack<T>& A, T x) 
     { 
     Stack<T> B; 
     bool check = false; 
     while(!A.Empty()) 
      { 
      if(A.Top() == x) check = true; 
      B.Push(A.Top()); 
      A.Pop();    
      } 
     A = B; 
     if(check) return true; 
     return false; 
     } 

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

+1

Если это для класса или чего-то подобного, и вы хотите рассматривать это как «чистый» стек, тогда нет другого пути. –

+0

Вам нужно реализовать стек как есть или вы можете изменить так, чтобы стек был реализован с вектором внутри? –

+0

Учтите, что вам нужно как-то развернуть B до того, как вы сделаете 'A = B;' –

ответ

0

Мой вопрос, если есть другой способ, чтобы проверить, если элемент находится в стеке

The stack interface не имеет функции, которые поддерживают инспектирующих произвольные элементы, я боюсь.

в elemets перепутаны, как они вошли во втором ярусе

Путь, чтобы исправить это, чтобы совать все из второго стека и подтолкнуть их обратно в исходный стек.

0

Если вы хотите рассматривать это как стек pure, тогда нет другого способа сделать это. Вы можете видеть, что std::stack не предоставляет вам никакого интерфейса для изучения произвольных элементов в stack.

Если это не так, то вы не хотите, чтобы stack что-то вроде std::vector имеет больше смысла для случайного доступа к элементам контейнера.

+0

Thaks для совета. Я дошел до главы о векторах. Мне просто интересно, есть ли лучший способ для написания этой задачи с помощью стека, потому что сейчас я в стеке. :) –

+0

@SinanZikri, Есть упражнения, которые действительно хорошо работают со стеками. Я бы нашел некоторые из них вместо того, чтобы пытаться использовать его для чего-то, для чего он не предназначен. – chris

+0

@SinanZikri Понятно, что нет другого способа, это одно из ограничений структуры данных 'stack'. Как сказал Крис, искать алгоритмы, которые используют стеки, на этой странице есть несколько хороших примеров: http://en.wikipedia.org/wiki/Stack_(abstract_data_type) –

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