内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列——7-創(chuàng)新互聯(lián)

 用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列,并實(shí)現(xiàn)兩個(gè)函數(shù)appendTail和deleteHead,分別完成在隊(duì)列尾部插入結(jié)點(diǎn)和在隊(duì)列頭部刪除結(jié)點(diǎn)的功能。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),溆浦企業(yè)網(wǎng)站建設(shè),溆浦品牌網(wǎng)站建設(shè),網(wǎng)站定制,溆浦網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,溆浦網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

  棧的特點(diǎn)是“先進(jìn)后出,后進(jìn)先出”,而隊(duì)列的特點(diǎn)是“先進(jìn)先出,后進(jìn)后出”,因此可以想到只用一個(gè)棧是無法完成的,所以會(huì)需要兩個(gè)棧,先將輸入的數(shù)據(jù)都依次放入一個(gè)棧stack1中,但是先進(jìn)去的數(shù)據(jù)會(huì)被壓在棧底,而棧底的數(shù)據(jù)是需要最先被取出的,可畫圖如下:

用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列——7

當(dāng)要完成在隊(duì)列頭部刪除結(jié)點(diǎn)這就要用到另外一個(gè)棧stack2了,可以將第一個(gè)棧stack1的棧頂元素依次取出放進(jìn)另外的棧stack2中,這樣stack1中的棧底元素就變成了stack2中的棧頂元素,當(dāng)需要?jiǎng)h除隊(duì)列頭部結(jié)點(diǎn)的時(shí)候就可以pop出stack2的棧頂元素;

而需要在隊(duì)列尾部插入結(jié)點(diǎn)就往stack1中壓入數(shù)據(jù):

用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列——7

也就是相當(dāng)于,當(dāng)stack2不為空的時(shí)候,要?jiǎng)h除隊(duì)列頭部的結(jié)點(diǎn)就從stack2的棧頂中取出數(shù)據(jù),如果stack2為空的時(shí)候就將stack1中的數(shù)據(jù)全部都從棧頂取出依次放入stack2中,然后再取出stack2的棧頂元素;而要在隊(duì)列尾部插入結(jié)點(diǎn)的時(shí)候就直接往stack1里面push數(shù)據(jù),這并不影響刪除隊(duì)列首部的結(jié)點(diǎn),因?yàn)槊看蝡ush數(shù)據(jù)都往stack1里面放,而當(dāng)stack2不為空的時(shí)候從stack2中pop數(shù)據(jù),二者并不影響;

程序如下:

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

template <class T>
class Queue
{
private:
    vector<T> _stack1;         //定義隊(duì)列的成員變量直接使用庫類vector
    vector<T> _stack2;
    
public:
    Queue()        //直接用類的默認(rèn)構(gòu)造函數(shù),這里會(huì)自動(dòng)調(diào)用庫vector中的構(gòu)造函數(shù)創(chuàng)建兩個(gè)棧
    {}  

    //當(dāng)需要向隊(duì)列尾部放數(shù)據(jù)的時(shí)候,直接在棧1中push數(shù)據(jù)就可以了
    void appendTail(T data)
    {   
        _stack1.push_back(data);
    }   

    //當(dāng)要?jiǎng)h除隊(duì)列頭部的數(shù)據(jù)的時(shí)候
    void deleteHead()
    {   
        //先要判斷棧2中是否有數(shù)據(jù),如果有就直接取出棧頂?shù)脑?,此時(shí)就為隊(duì)首的數(shù)據(jù)
        if(!_stack2.empty())
        {
            _stack2.pop_back();
        }
        else//若棧2為空,則需要將棧1中的數(shù)據(jù)調(diào)換到棧2中,以保證先進(jìn)棧1的數(shù)據(jù)放在棧2的頂部
        {
            while(!_stack1.empty())
            {
                _stack2.push_back(_stack1.back());
                _stack1.pop_back();
            }
            if(!_stack2.empty())
                _stack2.pop_back();
            else
            {
                cout<<"the queue is empty..."<<endl;
                return;
            }   
        }
        cout<<"the new head is "<<_stack2.back()<<endl;
    }
     
 //為了觀察方便,這里定義一個(gè)打印隊(duì)列的函數(shù),這個(gè)函數(shù)其實(shí)也就是在完成兩個(gè)棧實(shí)現(xiàn)隊(duì)列的過程   
    void print_queue()
    {
    //這里要注意的是不能直接使用對(duì)象的成員變量stack1和stack2,因?yàn)檫@樣會(huì)更改對(duì)象的數(shù)據(jù),而
    //我們只是需要打印數(shù)據(jù)并不希望更改它,因此可以使用vector庫中的拷貝構(gòu)造函數(shù)再構(gòu)造出
    //兩個(gè)臨時(shí)棧
        vector<T> tmp1(_stack1);
        vector<T> tmp2(_stack2);

        cout<<"head ";
        if(tmp2.empty())//當(dāng)棧2為空的時(shí)候需要將棧1的數(shù)據(jù)挪到棧2再取出
        {
            while(!tmp1.empty())
            {
                tmp2.push_back(tmp1.back());
                tmp1.pop_back();
            }
            while(!tmp2.empty())
            {
                cout<<tmp2.back()<<" ";
                tmp2.pop_back();
            }
        }
        else
        {
        //當(dāng)棧2不為空的時(shí)候先取出棧2的數(shù)據(jù),然后再將棧1的數(shù)據(jù)放入棧2再取出
            while(!tmp2.empty())
            {
                cout<<tmp2.back()<<" ";
                tmp2.pop_back();
                if(tmp2.empty())
                {
                    while(!tmp1.empty())
                    {
                        tmp2.push_back(tmp1.back());
                        tmp1.pop_back();
                    }
                }
            }
        }
        cout<<"tail"<<endl;
        }
};

int main()
{
    Queue<char> queue;
    queue.appendTail('a');
    queue.appendTail('b');
    queue.appendTail('c');
    queue.appendTail('d');
    queue.appendTail('e');
    queue.print_queue();

    queue.deleteHead();
    queue.deleteHead();
    queue.print_queue();

    queue.appendTail('f');
    queue.appendTail('g');
    queue.appendTail('h');
    queue.print_queue();

    return 0;
}

因?yàn)樯厦娴年?duì)類是模板類,因此實(shí)現(xiàn)了代碼復(fù)用,隊(duì)中的數(shù)據(jù)可以為任意類型;

運(yùn)行程序:

用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列——7

《完》

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。

網(wǎng)站標(biāo)題:用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列——7-創(chuàng)新互聯(lián)
分享地址:http://www.rwnh.cn/article10/cejdgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、定制網(wǎng)站、微信小程序、品牌網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、云服務(wù)器

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
高青县| 聊城市| 金溪县| 吉林省| 威信县| 西盟| 汉源县| 天柱县| 泉州市| 栾川县| 太湖县| 普洱| 阿拉善盟| 宜春市| 梁平县| 清新县| 邵阳市| 达州市| 木兰县| 吉林市| 威信县| 河间市| 昆明市| 平潭县| 罗城| 萍乡市| 夏邑县| 东安县| 昭平县| 龙里县| 元江| 曲松县| 隆子县| 扶风县| 封丘县| 河池市| 年辖:市辖区| 靖边县| 长丰县| 南部县| 巫溪县|