劍指offer 用兩個棧來實現乙個佇列(C )

2021-10-03 22:35:54 字數 1589 閱讀 6853

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

這道題目在考研資料結構的時候也做過,用兩個棧來實現佇列進隊、出隊的功能是可以實現的。

1、棧(stack)是先進後出(filo)的資料結構,佇列(queue)是先進先出(fifo)的資料結構,它們都是操作受限的資料結構。

2、在c++語言的容器(stl)中,存在棧容器和佇列容器,壓棧出棧,進隊出隊的操作分別是sta

ck.p

ush(

),st

ack.

pop(

);qu

eue.

push

(),q

ueue

.pop

()

stack.push(),stack.pop();queue.push(),queue.pop()

stack.

push

(),s

tack

.pop

();q

ueue

.pus

h(),

queu

e.po

p().

取棧頂元素是sta

ck.t

op()

stack.top()

stack.

top(

).3、在用兩個棧實現佇列功能時,可用第乙個棧模擬進隊,第二個棧模擬出隊,從第乙個棧進棧的元素,依次壓入第二個棧,先進入棧中的元素到第二個棧中位置全部反了過來,出隊操作的時候就可以執行第二個棧的出棧操作就相當於實現了先進先出的情況,實現了出隊操作。

4、如果有新的元素進棧,且第二個棧中還有元素時,例如:a,b

,c,d

a,b,c,d

a,b,c,

d元素依次入棧,然後再次出棧進入第二個棧中,此時第二個棧中從上到下元素依次為a,b

,c,d

a,b,c,d

a,b,c,

d,如果a,b

a,ba,

b出隊,此時棧中還有c,d

c,dc,

d元素,當元素e

ee入棧時,馬上進入第二個棧就會出現a,b

a,ba,

b出隊後下乙個出隊的是e

ee,此時出現錯誤。所以,只有當第二個棧中的元素全部出棧的時候,才可以將第乙個棧中的元素出棧壓入第二個棧中。

class

solution

intpop()

}int top = stack2.

top();

// 取棧頂元素 用於出隊操作

stack2.

pop();

// 出隊後 出棧

return top;

// 返回出隊元素

}private

: stack<

int> stack1;

stack<

int> stack2;

};

sta

ck.e

mpty

()

stack.empty()

stack.

empt

y():棧的判空,空棧返回1,不空返回0;

劍指offer 用兩個棧實現佇列

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解析 我的思路是用乙個棧來儲存資料,入隊的話直接在這個棧上入棧,出隊的話借助輔助棧,對輔助棧入棧,然後取出頭元素,然後把輔助棧上的元素在...

用兩個棧實現佇列《劍指offer

題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 將元素入隊時壓入乙個棧中,隨後通過另乙個棧出隊 1 使用stack容器定義兩個棧 stack stack1 stack stack2 2 入隊 stack1.push node node為入隊元素 ...

劍指offer 用兩個棧實現佇列

記錄 劍指offer 上的演算法題。題目描述如下 佇列的宣告如下 template class cqueue cqueue t deletehead bool empty private stack stack1 stack stack2 實現的 如下 templatet stack1.push n...