iT邦幫忙

0

【C++】Stack and Queues

c++
  • 分享至 

  • xImage
  •  

堆疊跟柱列在程式中算是很基本的資料結構~

它們的儲存特性一個是LIFO~ 另一個則是FIFO~


學習目標: Stack and Queues的概念及實務

學習難度: ☆☆☆


堆疊的部分~ 我這邊用變數(頂部索引)跟陣列(堆疊容器)的方式來實作~

實作的思維很簡單~ 就是用變數存陣列頂部的索引~

例如~ 一個資料的堆疊頂部索引是1~ 兩個資料的堆疊頂部索引是2~

當彈出一個資料時~ 堆疊頂部索引就要減少~

#include<iostream>

using namespace std;

int stack[105]; //整數的陣列 

int stack_top; //陣列的頂部 

int main ()
{
    string cmd; //輸入的指令 
 
    int num; //輸入的整數 

    stack_top = 0; //初始化陣列的頂部  

    while( cin >> cmd ) //當輸入指令  
    {
        if( cmd == "push" )
        {
            cin >> num;
            
            stack[stack_top] = num;
            
            stack_top++;
        }
        
        else if( cmd == "pop" )
        {
            if( stack_top == 0 )
            {
            	cout << " nothing in stack" << endl;
			}                           
            else
            {
                cout << " pop from stack" << stack[stack_top-1] << endl;
                
                stack_top--;
            }
        }
        else
        {
           cout << " input error ";
        	
           main ();
		}
    }
    return 0;
}

在來看到柱列的部分~ 我這邊是用queue的函式庫~

所以說~ 這邊只要專注於記憶queue的使用方式即可~

例如~ 柱列的宣告~ push~ back~ front~ pop~ 等~

另外~ 陣列印出的方式是用~front印~ 然後再pop~

#include <iostream>

#include <queue>

using namespace std;

int main() 
{
	
    queue<int> q;
    
    q.push(1); // q[1]
    
    q.push(2); // q[1, 2]
    
    q.push(4); // q[1, 2, 4]

    cout << q.front() << endl; // 1
    
    cout << q.back() << endl; // 4
    
    cout << q.size() << endl; // 3
    
    

    int value1 = q.front(); // copy q.front's integer to value1
    
    int &value2 = q.front(); // reference q.front's address to value2
   
    cout << value1 << " " << &value1 << endl; //這裡的value1的地址不一樣,因為它是用copy的
    
    cout << q.front() << " " << &q.front() << endl; 
    
    cout << value2 << " " << &value2 << endl; 
    

    // 印出 queue 內所有內容 (思維是印front,然後pop,在輪迴直到結束~) 
    
    int size = q.size();
    
    for (int i = 0; i < size; i++) 
	{
        cout << q.front() << " ";
        
        q.pop();
    }
    
    cout << "\n";

    return 0;
}

參考資料:

https://www.csie.ntu.edu.tw/~b98902112/cpp_and_algo/cpp02/stack.html

https://shengyu7697.github.io/std-queue/


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言