資料結構中用兩個佇列實現棧

2021-10-09 02:36:14 字數 969 閱讀 7045

棧:後進先出(lifo-last in first out):最後插入的元素最先出來。

佇列:先進先出(fifo-first in first out):最先插入的元素最先出來。

圖(1):當棧裡面插入元素「abcd」的時候,元素a在棧底(最後出去),d在棧頂(最先出去);

圖(2):將元素「abc」從q1中頭刪,然後再q2中尾插進來之後,頭刪q1中的元素「d」,就相當於實現了棧頂元素的出棧;

圖(3):同理,將元素「ab」從q2中頭刪,然後尾插到q1中,然後再頭刪q2中的元素「c」;

圖(4):同理,刪除元素「b」;

圖(5):當棧又插入乙個元素「e」時,此時元素「a」不能從佇列中刪除,而是將元素「a」插入q2中,再刪除q1中的元素「e」,最後再刪除元素「a」。

說明:其中紅色框代表該佇列中的元素出佇列,該隊列為空。

template

<

typename t>

class

cstack

;template

<

typename t>

void cstack::(

const t& node)

//實現棧元素的插入

else

}template

<

typename t>

t cstack

::deletehead()

//實現棧元素的刪除

ret = q1.

front()

; q1.

pop();

}else

ret = q2.

front()

; q2.

pop();

}return ret;

}

資料結構之棧,實現,應用,兩個棧實現佇列

兩個棧實現佇列 兩個棧嚴格區分開來使用,乙個專門用來做插入 插入棧 乙個專門用來做彈出 彈出棧 這樣在做插入的時候什麼都不需要做,直接呼叫插入棧的push方法就可以了。但是在彈出的時候就要麻煩一點,先判斷在彈出棧中是否包含資料,如果包含,直接從頂部彈出,如果不包含,把插入棧中的元素挨個匯入到彈出棧中...

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

用兩個棧實現乙個佇列,這個問題與 兩個佇列實現乙個棧 原理非常的相似。只要你明白了 兩個佇列實現乙個棧 的原理,相信聰明的你,就會明白這個問題只是它的變種,所有的異或就會迎刃而解的。這裡大家可以參考我的部落格 如下 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...