棧:後進先出(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...