老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

數據結構(08)_隊列和棧的相互實現-創新互聯

1. 棧的隊列的相互實現

思考:棧和隊列在實現上非常相似,能否用相互實現?

成都創新互聯專注于通榆網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供通榆營銷型網站建設,通榆網站制作、通榆網頁設計、通榆網站官網定制、小程序制作服務,打造通榆網絡公司原創品牌,更為您提供通榆網站排名全網營銷落地服務。

1.1. StackToQueue

用棧實現隊列等價于用“后進先出”的特性實現“先進先出”的特性.
數據結構(08)_隊列和棧的相互實現
實現思路:

  • 準備兩個棧用于實現隊列:stack_in和stack_out
  • 入隊列:當有新元素入隊時,將其壓入隊列stack_in
  • 出隊列:當需要出隊時:
    1.stack_out.size() == 0,將stack_in中的數據逐一彈出并壓人stack_out(數據移動)
    2.stack_out.size() > 0, 將stack_out的棧頂元素出棧(出棧操作)
    代碼實現:
template < typename T >
class StackToQueue : public Queue
{
protected:
    mutable LinkStack m_stack_in;
    mutable LinkStack m_stack_out;

    void move() const   //O(n)
    {
        if(m_stack_out.size() == 0)
        {
           while(m_stack_in.size() > 0)
            {
                m_stack_out.push(m_stack_in.top());
                m_stack_in.pop();
            }
        }
    }
public:
    void enqueue(const T& e) //O(1)
    {
        m_stack_in.push(e);
    }

    void dequeue()  //O(n)
    {
        move();

        if(m_stack_out.size() > 0)
        {
            m_stack_out.pop();
        }
        else
        {
            THROW_EXCEPTION(InvalidOperationException, "no element in current StackToQueue...");
        }
    }

    T front() const //O(n)
    {
        move();

        if(m_stack_out.size() > 0)
        {
            return m_stack_out.top();
        }
        else
        {
            THROW_EXCEPTION(InvalidOperationException, "no element in current StackToQueue...");
        }
    }

    void clear()    // O(n)
    {
        m_stack_in.clear();
        m_stack_out.clear();
    }

    int length() const  //O(n)
    {
        return m_stack_in.size() + m_stack_out.size();
    }
};

評價:
雖然可以使用棧實現隊列,但是相比直接使用鏈表實現隊列,在出隊和獲取對頭元素的操作中,時間復雜度都變為了O(n),可以說并不高效。

1.2.QueueToStack

使用隊列實現棧,本質上就是使用“先進先出”的特性實現棧“后進先出”的特性。
數據結構(08)_隊列和棧的相互實現
實現思路:

  • 準備兩個隊列用于實現棧:queue_1[in]和queue_2[out]
  • 入棧:當有新元素入棧時,將其加入隊列[in]
  • 出棧:
    1. 將隊列[in]中的前n-1個元素出隊,并進入隊列[out]中;
    2. 將隊列[in]中的最后一個元素出隊列(出棧操作)
    3. 交換兩個隊列的角色;
      代碼實現:
template < typename T >
class QueueToStack : public Stack
{
protected:
    LinkQueue m_queue_in;
    LinkQueue m_queue_out;
    LinkQueue* m_qIn;
    LinkQueue* m_qOut;

    void move() const   //O(n)
    {
       while(m_qIn->length()-1 > 0)
        {
            m_qOut->enqueue(m_qIn->front());
            m_qIn->dequeue();
        }
    }

    void swap()     //O(1)
    {
        LinkQueue* temp = NULL;

        temp = m_qIn;
        m_qIn = m_qOut;
        m_qOut = temp;
    }
public:
    QueueToStack()  //O(1)
    {
        m_qIn  = &m_queue_in;
        m_qOut = &m_queue_out;
    }

    void push(const T& e)   //O(n)
    {
        m_qIn->enqueue(e);
    }

    void pop()      //O(n)
    {
        if(m_qIn->length() > 0)
        {
            move();
            m_qIn->dequeue();
            swap();
        }
        else
        {
            THROW_EXCEPTION(InvalidOperationException, "no element in current QueueToStack...");
        }
    }

    T top() const       //O(n)
    {
        if(m_qIn->length() > 0)
        {
            move();
            return m_qIn->front();
        }
        else
        {
            THROW_EXCEPTION(InvalidOperationException, "no element in current QueueToStack...");
        }
    }

    void clear()        //O(n)
    {
        m_qIn->clear();
        m_qOut->clear();
    }

    int size() const    //O(1)
    {
        return m_qIn->length() + m_qOut->length();
    }
};

總結評價:
雖然可以使用隊列實現棧,但是相比直接使用鏈表實現棧,入棧、出棧、獲取棧頂元素操作中,時間復雜度都變為了O(n),可以說并不高效。

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


網頁名稱:數據結構(08)_隊列和棧的相互實現-創新互聯
鏈接URL:http://www.xueling.net.cn/article/dsdeei.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 夜夜爽夜夜叫夜夜高潮漏水 | eeuss亚洲精品久久 | 亚洲精品乱码久久久久久久久久 | 免费观看欧美猛交视频黑人 | 大地影视中文第二页的背景故事 | 亚洲国产精品无码成人A片在线 | 欧美一级片在线观看 | 久久婷婷久久一区二区三区 | 亚洲精品无码MV在线观看软件 | 久久久久99精品成人片牛牛影视 | 成人av一区二区三区在线观看 | 精品成人A区在线观看 | 高清精品视频 | 三人交free性欧美 | 伊人久久?合精品一区二区三区 | 日韩性视频| 国产成人久久精品二区三区牛 | 激情超碰| 久久久久免费看黄a毛片肥婆 | 欧美日韩中文字幕一区二区高清 | 久久久久久久中文 | 最新av偷拍av偷窥av网站 | 国产偷伦在线 | 精品一区乱 | 91高清视频免费观看 | 黄色免费大片 | 午夜男女爽爽影院网站 | 一级网站在线观看 | 7799精品天天综合网 | 日韩视频在线一区 | 亚欧洲乱码视频一二三区 | 国产特黄色片 | 大香伊蕉最新视频 | 久久精品国产77777蜜臀 | 2020年最新国产精品正在播放 | 亚洲精品999 | 国产精品久久久久久久av福利 | 一级片久久久 | 婷婷亚洲综合五月天小说 | 尤物yw193can在线观看 | 国内精品自国内精品自线 |