2013-11-21 29 views
0

我想知道是否有方法檢查堆棧中是否存在元素。 假設堆棧接口有push,pop,isEmpty,getTop,成員函數。檢查堆棧中是否存在元素

我知道我們可以做到這一點,如果我們得到頂部,與該元素進行比較並彈出它,直到它變空。但是這種方法會很費錢,因爲我們必須創建另一個棧來存儲彈出式元素並重新恢復。

+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