最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年03月18日 08:40:11   投稿:lqh  
這篇文章主要介紹了詳解C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的相關(guān)資料,需要的朋友可以參考下

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

棧為后進(jìn)先出,隊(duì)列為先進(jìn)先出

    用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列。是一個(gè)比較經(jīng)典的問(wèn)題。

看到這個(gè)問(wèn)題,我的第一個(gè)解題思路為:

          定義兩個(gè)棧,s1,s2。s1作為入隊(duì)列棧,s2作為出隊(duì)列棧;

                入隊(duì)列:每次入隊(duì)列的時(shí)候,將數(shù)值壓入s1棧中;

                出隊(duì)列:出隊(duì)列時(shí),將s1中的所有數(shù)據(jù),壓進(jìn)s2棧中,然后刪除s2的棧頂數(shù)據(jù),然后再將s2中的剩余數(shù)據(jù)壓入s1中。

在這其中s1是一個(gè)存儲(chǔ)空間,s2是一個(gè)輔助空間。

   進(jìn)一步想一下上述辦法,在出隊(duì)列時(shí),每一次都要將s1倒進(jìn)s2,然后刪除s2棧頂后又將s2的數(shù)據(jù)倒入s1;有另一個(gè)思路可以減少倒的次數(shù);

    入隊(duì)列時(shí):將數(shù)據(jù)壓進(jìn)s1;

    出隊(duì)列時(shí):判斷如果s2為空,那么將s1中的數(shù)據(jù),壓進(jìn)s2中,然后刪除s2棧頂,如果s2不為空那么再刪除s2的棧頂即可;

并且還可以?xún)?yōu)化,優(yōu)化如下:

           出隊(duì)列時(shí),判斷如果s2為空,那么將s1中n-1個(gè)數(shù)據(jù),壓進(jìn)s2中,然后刪除s1中的棧頂,如果s2不為空那么直接刪除s2的棧頂即可;

優(yōu)化版的c++實(shí)現(xiàn)如下:

#include<iostream> 
using namespace std; 
#include<stack> 
//棧 后進(jìn)先出 隊(duì)列 先進(jìn)先出 
template<class T> 
class Queue 
{ 
public: 
 
  /*T Pop_back() 
  { 
    if (s2.size() <= 0) 
    { 
      while(s1.size() > 0) 
      { 
        T& temp = s1.top(); 
        s1.pop(); 
        s2.push(temp); 
      } 
    } 
    if (s2.size() == 0) 
      throw new exception("queue is empty "); 
 
    T tep = s2.top(); 
    s2.pop(); 
    return tep; 
  }*/ 
 
  T Pop_back() //比上面少一次出棧 
  { 
    if (s2.size() <= 0) 
    { 
      while (s1.size() > 1) 
      { 
        T& temp = s1.top(); 
        s1.pop(); 
        s2.push(temp); 
      } 
      T tep = s1.top(); 
      s1.pop(); 
      return tep; 
    } 
    else{ 
      T tep = s2.top(); 
      s2.pop(); 
      return tep; 
    } 
  } 
   
    void Push_back(const T& value) 
  { 
    s1.push(value); 
  } 
 
    bool Empty() 
    { 
      return (s1.empty() && s2.empty()); 
    }       
 
protected: 
  stack<T> s1; 
  stack<T> s2; 
}; 
 
void TextQueue() 
{ 
  Queue<int> q1; 
  q1.Push_back(1); 
  q1.Push_back(2); 
  q1.Push_back(3); 
  q1.Push_back(4); 
 
  cout << q1.Pop_back() << endl; 
  cout << q1.Pop_back() << endl; 
  cout << q1.Pop_back() << endl; 
  cout << q1.Pop_back() << endl; 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C++無(wú)符號(hào)整數(shù)溢出問(wèn)題解析

    C++無(wú)符號(hào)整數(shù)溢出問(wèn)題解析

    這篇文章主要介紹了C++無(wú)符號(hào)整數(shù)溢出探究,本文主要探討C/C++中無(wú)符號(hào)整數(shù)超過(guò)范圍后的計(jì)算問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C++變量和基本類(lèi)型詳解

    C++變量和基本類(lèi)型詳解

    這篇文章主要介紹了C++變量和基本類(lèi)型,,一定要注意局部變量與全局變量的作用范圍,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-10-10
  • VC++進(jìn)度條process Bar的用法實(shí)例

    VC++進(jìn)度條process Bar的用法實(shí)例

    這篇文章主要介紹了VC++進(jìn)度條process Bar的用法,是進(jìn)行VC++應(yīng)用程序開(kāi)發(fā)中非常常見(jiàn)的實(shí)用技巧,需要的朋友可以參考下
    2014-10-10
  • VC++的combobox控件用法匯總

    VC++的combobox控件用法匯總

    這篇文章主要介紹了VC++的combobox控件用法,對(duì)VC++初學(xué)者來(lái)說(shuō)尤為重要,需要的朋友可以參考下
    2014-08-08
  • 深入解析C語(yǔ)言中函數(shù)指針的定義與使用

    深入解析C語(yǔ)言中函數(shù)指針的定義與使用

    這篇文章主要介紹了C語(yǔ)言中函數(shù)指針的定義與使用,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-04-04
  • C++共享內(nèi)存刪除的陷阱

    C++共享內(nèi)存刪除的陷阱

    這篇文章主要介紹了C++共享內(nèi)存刪除的陷阱講解,當(dāng)進(jìn)程結(jié)束使用共享內(nèi)存區(qū)時(shí),要通過(guò)函數(shù) shmdt 斷開(kāi)與共享內(nèi)存區(qū)的連接。下面來(lái)看看具體問(wèn)題都是怎么解決的吧
    2022-01-01
  • C++中平衡二叉搜索樹(shù)的模擬實(shí)現(xiàn)

    C++中平衡二叉搜索樹(shù)的模擬實(shí)現(xiàn)

    二叉搜索樹(shù)雖可以縮短查找的效率,但如果數(shù)據(jù)有序或接近有序二叉搜索樹(shù)將退化為單支樹(shù),查找元素相當(dāng)于在順序表中搜索元素,效率低下,所以本文給大家介紹了C++平衡二叉的搜索樹(shù)模擬實(shí)現(xiàn)方法,需要的朋友可以參考下
    2023-09-09
  • C語(yǔ)言實(shí)現(xiàn)航班訂票系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)航班訂票系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)航班訂票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式代碼示例

    C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式代碼示例

    數(shù)組元素和數(shù)組名都可以作為函數(shù)的參數(shù)以實(shí)現(xiàn)函數(shù)間數(shù)據(jù)的傳遞和共享,下面這篇文章主要給大家介紹了關(guān)于C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • C++實(shí)踐Time類(lèi)中的運(yùn)算符重載參考方法

    C++實(shí)踐Time類(lèi)中的運(yùn)算符重載參考方法

    今天小編就為大家分享一篇關(guān)于C++實(shí)踐Time類(lèi)中的運(yùn)算符重載參考方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02

最新評(píng)論

江陵县| 通化县| 平陆县| 杭锦后旗| 阿城市| 门头沟区| 嘉黎县| 峨眉山市| 安庆市| 斗六市| 淅川县| 高安市| 达尔| 胶南市| 曲水县| 闵行区| 搜索| 宣威市| 德清县| 英山县| 商南县| 井陉县| 凌源市| 昌都县| 甘泉县| 开化县| 仁化县| 苍溪县| 洛浦县| 克山县| 东源县| 临城县| 团风县| 梅州市| 大荔县| 城固县| 龙陵县| 永州市| 南乐县| 库尔勒市| 买车|