欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

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

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

創(chuàng)新互聯(lián)建站是一家以網(wǎng)絡(luò)技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護(hù)、網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站備案、服務(wù)器租用、域名注冊(cè)、軟件開發(fā)、重慶小程序開發(fā)等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務(wù),是一家有著豐富的互聯(lián)網(wǎng)運(yùn)營(yíng)推廣經(jīng)驗(yàn)的科技公司,有著多年的網(wǎng)站建站經(jīng)驗(yàn),致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開一個(gè)面向全國(guó)乃至全球的業(yè)務(wù)窗口:建站咨詢電話:028-86922220

思路一:

我們?cè)O(shè)定s1是入棧的,s2是出棧的。

入隊(duì)列,直接壓到s1即可

出隊(duì)列,先把s1中的元素倒入到s2中,彈出s2中的棧頂元素;再把s2的剩余元素全部倒回s1中。

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

缺點(diǎn):

每次只要出棧一個(gè)元素就要將元素倒來(lái)倒去,麻煩?。?!


思路2:

入隊(duì)列時(shí):
如果s1為空,把s2中所有的元素倒出壓到s1中。否則直接壓入s1   

出隊(duì)列時(shí):
如果s2不為空,把s2中的棧頂元素直接彈出。否則,把s1的所有元素全部彈出壓入s2中,再?gòu)棾鰏2的棧頂元素

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

思路1無(wú)條件地每次都要將元素倒來(lái)倒去,思路2出隊(duì)時(shí)較思路1簡(jiǎn)單


思路3:

我們?cè)O(shè)定s1是入棧的,s2是出棧的

入隊(duì)列:直接壓入元素至s1即可

出隊(duì)列:如果s2不為空,把s2中的棧頂元素直接彈出。否則,把s1的所有元素全部彈出壓入s2中,再?gòu)棾鰏2的棧頂元素

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

相比于方法2,入隊(duì)直接壓入即可~

那么,我們可以看出,思路三最簡(jiǎn)單,我們下面看下代碼。

代碼實(shí)現(xiàn):

1)我們直接調(diào)用庫(kù)里的stack來(lái)實(shí)現(xiàn)。(一般調(diào)用庫(kù)里的就行了

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
#include<stack>

template<class T>
class Queue
{
public:
    void appendTail(const T& x)
    {
        s1.push(x);
    }

    void deleteHead()
    {
          if (s2.empty())
          {
              while (!s1.empty())
              {
                  s2.push(s1.top());
                  s1.pop();
              }
              cout << s2.top() << "  ";
              s2.pop();
          }
          else
          {
               cout << s2.top() << "  ";
               s2.pop();          
          } 
    }
private:
    stack<T> s1;
    stack<T> s2;
    
};


void Test()
{
    Queue<int> q;
    q.appendTail(1);
    q.appendTail(2);
    q.appendTail(3);
    q.appendTail(4);
    q.deleteHead();
    q.deleteHead();
    q.deleteHead();
    q.deleteHead();
}

int main()
{
    Test();
    system("pause");
    return 0;
}

2)自己實(shí)現(xiàn)棧實(shí)現(xiàn)。


#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

#include<assert.h>

//直接實(shí)現(xiàn)Stack,也可以用適配器實(shí)現(xiàn)棧,或者用庫(kù)。
//將Stack基本功能實(shí)現(xiàn)如下:
template<class T>

class Stack
{
public:
    Stack()
        :_array(NULL)
        , _size(0)
        , _capacity(0)
    {}

    Stack<T>(const Stack<T>& s)
        : _array(new T[s._capacity])
    {
        swap(_array, s._array);
        swap(_size, s._size);
        swap(_capacity, s._capacity);
    }

    Stack<T>& operator=(const Stack<T>& s)
    {
        if (&s != this)
        {
            swap(_array, s._array);
            swap(_size, s._size);
            swap(_capacity, s._capacity);
        }
        return *this;
    }

    ~Stack()
    {
        if (_array)
        {
            delete[] _array;
            _array = NULL;
        }
    }

    void _CheckCapacity()
    {
        if (_size == 0)
        {
            _capacity = 3;
            _array = new T[_capacity];
        }
        if (_size >= _capacity)
        {
            _capacity *= 2;
            T* tmp = new T[_capacity];
            for (int index = 0; index < _size; index++)
            {
                tmp[index] = _array[index];
            }
            delete[] _array;
            _array = tmp;
        }
    }

    void Push(const T& x)
    {
        _CheckCapacity();
        _array[_size++] = x;
    }

    void Pop()
    {
        if (_size == 0)
        {
            return;
        }
        --_size;
    }

    size_t Size()
    {
        return _size;
    }

    bool Empty()
    {
        return Size() == 0;
    }

    T& Top()
    {
        assert(_size > 0);
        return _array[_size - 1];
    }

private:
    T* _array;
    size_t _size;
    size_t _capacity;
};


template<class T>
class Queue
{
public:
    void InQueue(const T& x)
    {
        s1.Push(x);
    }

    void OutQueue()
    {
        //棧s2為空,則將棧s1的元素全部倒入s2中,再?gòu)棾鲎钌厦娴哪莻€(gè)元素
        if (s2.Empty())
        {
            while (!s1.Empty())
            {
                s2.Push(s1.Top());
                s1.Pop();
            }
            s2.Pop();
        }

        //棧s2不為空,直接彈出元素
        else
        {
            s2.Pop();
        }
    }

    
    void Print()    //打印隊(duì)列元素,分四種情況。
    {
        if (s1.Empty() && s2.Empty())
        {
            cout << "The Queue is Empty!";
        }

        else if (!s1.Empty() && s2.Empty())
        {
            while (!s1.Empty())
            {
                s2.Push(s1.Top());
                s1.Pop();
            }

            while (!s2.Empty())
            {
                cout << s2.Top() << "  ";
                s2.Pop();
            }
        }

        else if (s1.Empty() && !s2.Empty())
        {
            while (!s2.Empty())
            {
                cout << s2.Top() << "  ";
                s2.Pop();
            }
        }

        else
        {
            while (!s2.Empty())
            {
                cout << s2.Top() << "  ";
                s2.Pop();
            }

            while (!s1.Empty())
            {
                s2.Push(s1.Top());
                s1.Pop();
            }

            while (!s2.Empty())
            {
                cout << s2.Top() << "  ";
                s2.Pop();
            }
        }
        cout << endl;
    }

private:
    Stack<T> s1;    //入隊(duì)
    Stack<T> s2;    //出隊(duì)
};



//測(cè)試兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
void Test1()
{
    Queue<int> q1;
    q1.InQueue(1);
    q1.InQueue(2);
    q1.InQueue(3);
    q1.InQueue(4);
    /*q1.Print();*/

    q1.OutQueue();
    /*q1.Print();*/
    q1.InQueue(5);
    q1.InQueue(6);
    q1.InQueue(7);

    q1.Print();
}



int main()
{
    Test1();
    system("pause");
    return 0;
}

(1個(gè)細(xì)節(jié)):

      注意再將元素倒入另一個(gè)棧時(shí),代碼并不是先pop,再push。因?yàn)檫@樣push后元素就找不到了。因此要先訪問(wèn)到棧頂元素top,再push,而后pop。

本文標(biāo)題:【數(shù)據(jù)結(jié)構(gòu)】(面試題)使用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列(詳細(xì)介紹)
文章分享:http://aaarwkj.com/article26/isjijg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版微信公眾號(hào)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)商城網(wǎng)站、用戶體驗(yàn)

廣告

聲明:本網(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)

微信小程序開發(fā)
久久久久久久精品久久| 国产精品一区二区熟女| 日本中文字幕有码专区| 中文字幕在线视频黄字幕| 人妻少妇精品一区毛二区| 国产真实乱偷精品视频免| 人人看男人的天堂东京| 国产精品免费网站在线观看| 97国产精品成人免费视频| 精品人妻一区两区三区| 亚洲激情久热中文字幕| 亚洲av粉色一区二区三区| 国产成人亚洲精品在线看| 亚洲第一毛片免费在线观看| 成年人三级黄色片视频| 色婷婷久久综合中文久久| 亚洲视频在线的视频在| 日韩免费精品一区二区| 久久中文字幕一区二区三区| 国内精品亚洲成av人片麻豆| 色吊丝日韩在线观看| 女人天堂网av免费看| 中文字幕精品一区二区三区精品| 日本岛国免费一区二区| 日本高清免费播放一区二区| 国产精品国产亚洲精品| 久草免费人妻视频在线| 国产午夜亚洲精品福利| 亚洲精品一级理论片对面 | 国内一级片内射免费视频观看| 女同久久精品国产精品天堂99| 一区二区三区欧美小黄片| 十八禁在线观看点击进入| 亚州中文字幕久久一区| 亚洲国产日韩精品一区二| 中文字幕日韩不卡顿一区二区| 91麻豆精品一二三区在线| 最新日韩欧美一区二区| 欧美日韩视频一区二区| 在线观看不卡的黄色地址| 亚洲和欧洲一码二码区视频|