日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

18.用两个栈实现队列[2StacksToImplementQueue]

發布時間:2023/12/2 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 18.用两个栈实现队列[2StacksToImplementQueue] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目】

某隊列的聲明如下:

C++ Code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
?
template<typename?T>
class?CQueue
{
public:
????CQueue()?{}
????~CQueue()?{}

????
void?appendTail(const?T?&node);??//?append?a?element?to?tail
????void?deleteHead();???????????????//?remove?a?element?from?head

private:
????stack<T>?m_stack1;
????stack<T>?m_stack2;
};

【分析】

我們用一個表來總結一下前面的例子執行的步驟:

操作

m_stack1

m_stack2

append a

{a}

{}

append b

{a,b}

{}

append c

{a,b,c}

{}

delete head

{}

{b,c}

delete head

{}

{c}

append d

ozvdkddzhkzd

{c}

delete head

ozvdkddzhkzd

{}

總結完push和pop對應的過程之后,我們可以開始動手寫代碼了。

【代碼】

C++ Code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
?
///
//?Append?a?element?at?the?tail?of?the?queue
///
template<typename?T>?void?CQueue<T>::appendTail(const?T?&element)
{
????
//?push?the?new?element?into?m_stack1
????m_stack1.push(element);
}

///
//?Delete?the?head?from?the?queue
///
template<typename?T>?void?CQueue<T>::deleteHead()
{
????
//?if?m_stack2?is?empty,?and?there?are?some
????//?elements?in?m_stack1,?push?them?in?m_stack2
????if(m_stack2.size()?<=?0)
????{
????????
while(m_stack1.size()?>?0)
????????{
????????????T?&data?=?m_stack1.top();
????????????m_stack1.pop();
????????????m_stack2.push(data);
????????}
????}

????
//?push?the?element?into?m_stack2
????assert(m_stack2.size()?>?0);
????m_stack2.pop();
}

【擴展】

這道題是用兩個棧實現一個隊列。反過來能不能用兩個隊列實現一個棧?如果可以,該如何實現?

【參考】

http://zhedahht.blog.163.com/blog/static/2541117420073293950662/

轉載于:https://www.cnblogs.com/hellogiser/p/3738751.html

總結

以上是生活随笔為你收集整理的18.用两个栈实现队列[2StacksToImplementQueue]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。