資料結構 兩個棧實現乙個佇列

2021-10-11 04:17:41 字數 1366 閱讀 8628

棧的特性是先進後出,佇列的特性是先進先出。那麼,我們使用兩個棧,對同乙個元素進行先進後出兩次棧就形成了先進先出的順序。

即乙個元素需要入棧兩次,才能被取出來。

我們將put,get定義為存放元素,與取元素。

使用命名為in,out的棧,in代表往佇列裡面put元素第一次入棧是進入in,out代表get元素是從out這個棧裡取。

第一次,get時out為空,需要從in中取元素,以形成正序取。

其內部實現細節如下:

若a還沒取,c已進棧時,如何控制?很明顯這是乙個執行緒安全問題。

在out取in中的元素的時候我們需要對 in加鎖,阻止他存放新元素進去。

而對於out,我們是在out為空的時候才取in中元素所以一般不會出現執行緒安全問題。

以下是簡易版本實現:

public

class

twostackqueue

);}}public

void

put(t t)

finally

}public t get()

}finally

return out.

pop();

}else

}finally

}public

boolean

isempty()

public

intsize()

}

資料結構 兩個佇列實現乙個棧

用兩個棧實現乙個佇列,這個問題與 兩個佇列實現乙個棧 原理非常的相似。只要你明白了 兩個佇列實現乙個棧 的原理,相信聰明的你,就會明白這個問題只是它的變種,所有的異或就會迎刃而解的。這裡大家可以參考我的部落格 如下 define crt secure no warnings 1 includeusi...

資料結構 兩個佇列實現乙個棧

void stackinit stack stack 初始化 void stackdestroy stack stack 銷毀 void stackprint stack stack,const char msg 列印棧 void stackpush stack stack,datatype val...

資料結構 兩個棧實現乙個佇列 面試

棧結構 先進後出,後進先出,只允許在棧尾操作。佇列 先進先出,在隊尾入隊,在隊頭出隊。要想用兩個棧實現乙個佇列,就需要使用乙個相當於中間量的結構進行佇列的入隊和出隊操作。用圖形象化為 這樣問題就從圖中得出了思路 入隊操作 把入隊元素一一存入乙個棧結構中即可。出隊操作 出隊時,先判斷另乙個棧結構中是否...