【數(shù)據(jù)結(jié)構(gòu)】?jī)蓚€(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列【面試】

棧結(jié)構(gòu):先進(jìn)后出,后進(jìn)先出,只允許在棧尾操作。

武昌網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,武昌網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為武昌上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的武昌做網(wǎng)站的公司定做!

隊(duì)列:先進(jìn)先出,在隊(duì)尾入隊(duì),在隊(duì)頭出隊(duì)。

要想用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列,就需要使用一個(gè)相當(dāng)于中間量的結(jié)構(gòu)進(jìn)行隊(duì)列的入隊(duì)和出隊(duì)操作。

用圖形象化為:

【數(shù)據(jù)結(jié)構(gòu)】 兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列【面試】

這樣問(wèn)題就從圖中得出了思路:

入隊(duì)操作:把入隊(duì)元素一一存入一個(gè)棧結(jié)構(gòu)中即可。

出隊(duì)操作:出隊(duì)時(shí),先判斷另一個(gè)棧結(jié)構(gòu)中是否有元素,若有先將元素出棧Pop();若為空,則把棧S1中的元素全部倒入Push()棧S2中,然后讓S2棧頂元素出棧Pop(),此時(shí)的元素序列和棧S1中剛好相反,即達(dá)到出隊(duì)效果。

那么,用代碼實(shí)現(xiàn)也變得簡(jiǎn)單:

#include <iostream>
#include <stack>
using namespace std;

class Queue
{
public:
    void Push_Queue(int val)
    {
        s1.push(val);   // 實(shí)現(xiàn)了入隊(duì)尾入隊(duì)操作
        cout <<s1.top() << " ";
    }

    void Pop_Queue()
    {
        if (s2.empty())
        {
            while (s1.top())
            {
                s2.push(s1.top()--);
            }
             s2.pop();  // 實(shí)現(xiàn)了隊(duì)頭出隊(duì)操作
        }
        else
        {
            s2.pop();
        }
    }

    void Show()
    {
        cout << endl;
        // 因?yàn)槭褂玫氖窍到y(tǒng)庫(kù)stack,其pop函數(shù)返回值為void,所以不能打印出來(lái),我們只打印pop后的隊(duì)頭元素進(jìn)行驗(yàn)證
        cout << s2.top() << endl; 
    }

private:
    stack<int> s1;
    stack<int> s2;

};

int main()
{
    Queue q;  // ??構(gòu)造函數(shù)的參數(shù)
    q.Push_Queue(1);
    q.Push_Queue(2);
    q.Push_Queue(3);
    q.Push_Queue(4);
    q.Push_Queue(5);

    q.Pop_Queue();

    q.Show(); // 打印pop后的對(duì)頭元素

    system("pause");
    return 0;
}

如有紕漏,歡迎指正。

分享標(biāo)題:【數(shù)據(jù)結(jié)構(gòu)】?jī)蓚€(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列【面試】
文章來(lái)源:http://muchs.cn/article44/gesehe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、虛擬主機(jī)、全網(wǎng)營(yíng)銷(xiāo)推廣、靜態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)、微信公眾號(hào)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作