堆疊跟柱列在程式中算是很基本的資料結構~
它們的儲存特性一個是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/