樹心幽徑

« 20200529在UBuntu Linux 安裝並使用gcc10.1來編寫1個C程式 | Main | 20200616用python來可輸入產生費氏數列的程式 »

20200604用DEV-C++設計C++STL堆疊及佇列程式
2020/06/04,21:43

如沒有DEV-C++ C語言編譯開發環境(SDK),請先下載Dev-Cpp 5.11 TDM-GCC 4.9.2 Setup.exe(約49MB)並安裝之

(一)C++ STL堆疊程式:

(1-0) 堆疊資料結構,只能自頂端推入(PUSH)元素,也只能自頂端移走(POP)元素,先進後出。

(1-1)例子:

將如下3數1、2、3依序推入堆疊S中,再自S取出二個,

再將4、5、6依序推入堆疊S中,再自S取出1個,

再將7、8、9依序推入堆疊S中,再自S取出2個,

最後的S為何?  答:「頂端:7 5 4 1」

會依序取出的數為何?  答:「3 2 6 9 8」


(1-2)執行DEV-C++並按CTRL+N編寫如下程式碼並存為 d:\s1.cpp

 

#include <stack>
#include <iostream>
using namespace std;
int main(){
    stack<int> s;
    printf("\n推入10個立方數到堆疊s中:\n<s底端:");
    for (int i=0;i<10;i++) {
        int x=i*i*i;
        printf("%3d : ",x);
        s.push(x);
    }
    printf(":s頂端>\n將堆疊s中的數一一取出如下:\n");
    while (not s.empty()){
        int y=s.top();
        printf("將s頂端元素(%3d)取出前, s有%3d個元素  \n", y,s.size());
        s.pop();                 
    }
}


(1-3)按F11編譯並執行s1.cpp,會於新視窗上輸出結果如下:


推入10個立方數到堆疊s中:
<s底端:  0 :   1 :   8 :  27 :  64 : 125 : 216 : 343 : 512 : 729 : :s頂端>
將堆疊s中的數一一取出如下:
將s頂端元素(729)取出前, s有 10個元素
將s頂端元素(512)取出前, s有  9個元素
將s頂端元素(343)取出前, s有  8個元素
將s頂端元素(216)取出前, s有  7個元素
將s頂端元素(125)取出前, s有  6個元素
將s頂端元素( 64)取出前, s有  5個元素
將s頂端元素( 27)取出前, s有  4個元素
將s頂端元素(  8)取出前, s有  3個元素
將s頂端元素(  1)取出前, s有  2個元素
將s頂端元素(  0)取出前, s有  1個元素

(1-4)按CTRL+N編寫如下程式碼並存為 d:\s2.cpp

#include <stack>

#include <iostream>

using namespace std;

int main(){   

stack<int> s;   

printf("\n推入1,2,3\n");  s.push(1);   s.push(2);   s.push(3);      

printf("取出(%d)\n", s.top());   s.pop();                   
printf("取出(%d)\n", s.top());   s.pop();                 

printf("\n推入4,5,6\n");   s.push(4);   s.push(5);   s.push(6);   

printf("取出(%d)\n", s.top());   s.pop();                       

printf("\n推入7,8,9\n");   s.push(7);   s.push(8);   s.push(9);   

printf("取出(%d)\n", s.top());   s.pop();    

printf("取出(%d)\n", s.top());   s.pop();              

}

(1-5)按F11編譯並執行s2.cpp,會於新視窗上輸出結果如下:


推入1,2,3
取出(3)
取出(2)

推入4,5,6
取出(6)

推入7,8,9
取出(9)
取出(8)

(二)C++ STL佇列程式:

(2-0) 佇列資料結構,自後端推入(PUSH)元素,自前端移走(POP)元素,先進先出。

(2-1)例子:    

將如下3數1、2、3依序自後端推入佇列Q中,再自Q前端取出二個,

再將4、5、6依序推入佇列Q中,再自Q取出1個,

再將7、8、9依序推入佇列中,再自Q取出2個,

最後的Q為何?  答:「後端: 9  8 7 6  :前端」

會依序取出的數為何?  答:「1 2 3 4 5」


(2-2)執行DEV-C++並按CTRL+N編寫如下程式碼並存為 d:\q1.cpp

#include <queue>
#include <iostream>
using namespace std;
int main(){
    queue<int> q;
    printf("\n插入10個平方數到佇列q中:\n <q前端:");
    for (int i=0;i<10;i++) {
        int x=i*i;
        printf("%3d : ",x);
        q.push(x);
        }
    printf(":q後端>\n將q中元素一一自前端取出如下:\n");
    while (not q.empty()){
        int y=q.front();
        printf("將q最前端元素(%2d)取出前, q有%2d個元素\n",y,q.size()); 
        q.pop();                  
    }
    printf("q.size()=%d\n",q.size());
}

(2-3)按F11編譯並執行q1.cpp,會於新視窗上輸出結果如下:


插入10個平方數到佇列q中:
 <q前端:  0 :   1 :   4 :   9 :  16 :  25 :  36 :  49 :  64 :  81 : :q後端>
將q中元素一一自前端取出如下:
將q最前端元素( 0)取出前, q有10個元素
將q最前端元素( 1)取出前, q有 9個元素
將q最前端元素( 4)取出前, q有 8個元素
將q最前端元素( 9)取出前, q有 7個元素
將q最前端元素(16)取出前, q有 6個元素
將q最前端元素(25)取出前, q有 5個元素
將q最前端元素(36)取出前, q有 4個元素
將q最前端元素(49)取出前, q有 3個元素
將q最前端元素(64)取出前, q有 2個元素
將q最前端元素(81)取出前, q有 1個元素
q.size()=0

 

(2-4)執行DEV-C++並按CTRL+N編寫如下程式碼並存為 d:\q2.cpp

#include <queue>

#include <iostream>

using namespace std;

int main(){    

queue<int> s;    

printf("\n推入1,2,3\n");    

s.push(1);   s.push(2);   s.push(3);        

printf("取出(%d)\n", s.front());   s.pop();                     

printf("取出(%d)\n", s.front());   s.pop();                     

printf("\n推入4,5,6\n");    s.push(4);   s.push(5);   s.push(6);    

printf("取出(%d)\n", s.front());   s.pop();                         

printf("\n推入7,8,9\n");    s.push(7);   s.push(8);   s.push(9);    

printf("取出(%d)\n", s.front());   s.pop();     

printf("取出(%d)\n", s.front());   s.pop();     

}

(2-5)按F11編譯並執行q2.cpp,會於新視窗上輸出結果如下:


推入1,2,3
取出(1)
取出(2)

推入4,5,6
取出(3)
推入7,8,9
取出(4)
取出(5)


REF1: https://larry850806.github.io/2016/06/06/STL1/

迴響

 
Accessible and Valid XHTML 1.0 Strict and CSS Powered by LifeType