2013-07-07 35 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

请注意,在做'A = B之前,你需要以某种方式取消B;' –

回答

0

我的问题是,如果有另一种方式来检查,如果元素在堆栈

stack interface有没有功能,支持任意检查的元素,我害怕。

的elemets反转像他们在第二堆栈

进入到解决这个问题是弹出所有的东西第二堆层,并把他们放回原堆栈的方式。

0

如果您想将此视为pure堆栈,则无法执行此操作。您可以看到std::stack不提供任何接口来检查stack中的任意元素。

如果情况并非如此,那么您不希望stack类似std::vector对随机访问容器元素更有意义。

+0

Thaks的建议。我到达了有关向量的章节。我只是想知道是否有更好的方式来编写这个任务,因为我现在在堆栈章节。 :) –

+0

@SinanZikri,有练习,实际上可以很好地与堆栈。我会发现其中的一些,而不是试图将它用于不适合使用的东西。 – chris

+0

@SinanZikri据了解,没有其他方式,这是'堆栈'数据结构的限制之一。正如克里斯说的寻找使用堆栈的算法,这个页面有一些很好的例子:http://en.wikipedia.org/wiki/Stack_(abstract_data_type) –