劍指Offer 利用兩個棧實現乙個佇列

2022-05-01 03:03:08 字數 1124 閱讀 6849

1 template class

cqueue

2;

思路:棧是先進後出,而佇列是先進先出的,而要用棧實現佇列的話,兩步操作如下:

進佇列:第乙個棧stack1專門用來壓入資料;

出佇列:要把佇列頭部元素輸出,而這個頭部會在stack1中的底部,因此我們需要利用輔助棧stack2 ,把stack1元素依次壓入stack2,這樣原來stack1中的底部元素變成stack2的棧頂,而這就是佇列的head,將之輸出即可。

上面分析是針對stack2空的情況,若stack2非空,則要繼續把stack2中元素依次pop出來。

實現**:

1

//進佇列36

//出佇列

7 template t cqueue::deletehead()818

}19if(stack2.empty())

2023

//取stack2棧頂元素,即佇列的head

24 t head =stack2.top();

25stack2.pop();

26return

head;

2728 }

陣列實現佇列

code:

1

//陣列實現佇列

2 template class

carrayqueue3;

17 template const

int carrayqueue:: nsize = 10

;18 template carrayqueue::carrayqueue(void)19

24 template carrayqueue::~carrayqueue(void)25

29//

進佇列31

36 array[(++ntail) % nsize] =element;

37if (nhead / nsize > 0)38

42}43//

出佇列44 template t carrayqueue::deletehead()

45

劍指offer 兩個棧實現佇列

使用兩個棧實現乙個佇列。棧是先進後出,佇列是後進先出。如果只有乙個棧那麼是無法實現佇列的,但是兩個棧完全可以。如下 templateclass cqueue templatet cqueue deletehead if stack2.size 0 throw queue is empty t ret...

劍指offer 兩個棧實現佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。棧的特點是先入後處,先出。而佇列的特點是先入先出,後出。所以我們整兩個棧,入棧的時候入第乙個。出棧的時候如果另外乙個非空,則優先處理另乙個。如果空的話,把所有的元素再 先出的放到另一棧裡,負負得正,得到了佇列的效果。c...

劍指offer 兩個棧實現佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。思路 佇列 先進先出 棧 先進後出 基於兩種資料結構的特性,可使用兩個棧不斷交換資料,如 stack1儲存佇列的元素,stack2為空,如果直接使用stack1彈出,將彈出的是佇列尾部元素,不符合佇列結構,因此採用st...