簡單的說,Queue是個操作陣列的方式,也就是利用兩個變數: head及tail,每次從head取得內容,從tail增加內容。
#include<stdio.h>
main(){
int queue[10]={1, 2, 3, 4, 5};
int head = 0;
int tail = 4;
**tail ++;
queue[tail] = 6;//push to the tail**
for (int i = head; i <= tail ; i ++){
printf("%d ",queue[i]);
}
printf("\\n");
**int a = queue[head]; //pop from the head
head ++;**
for (int i = head; i <= tail ; i ++){
printf("%d ",queue[i]);
}
printf("\\n");
}
可以利用c++內建的queue
#include <iostream>
#include <queue>
using namespace std;
int main(){
queue<int> q; // 一個空的 queue
q.push(10);
q.push(20);
q.push(30);
q.push(40);
q.push(50); // [10, 20, 30, 40, 50]
cout << q.front() << endl; // 10
cout << q.back() << endl; // 50
q.pop(); // pop from the front
q.push(60); // push to the back
cout << q.front() << endl; // 20
cout << q.back() << endl; // 60
}
簡單的說,Stack也是個操作陣列的方式,但只利用一個變數: top(其實就是tail),每次只從top取得內容,只從top增加內容。
#include<stdio.h>
main(){
int stack[10]={1, 2, 3, 4, 5};
int top = 4;
**top ++;
stack[top] = 6;//push to the top**
for (int i = 0; i <= top ; i ++){
printf("%d ",stack[i]);
}
printf("\\n");
**int a = stack[top]; //pop from the head
top --;**
for (int i = 0; i <= top ; i ++){
printf("%d ",stack[i]);
}
printf("\\n");
}
可以利用c++內建的stack
#include <iostream>
#include <stack>
using namespace std;
int main(){
stack<int> s; // 一個空的 stack
s.push(10);
s.push(20);
s.push(30);
s.push(40);
s.push(50); // [10, 20, 30, 40, 50]
cout << s.top() << endl; // 50
s.pop(); // pop from the front
s.push(60); // push to the back
cout << s.top() << endl; // 60
}
Tree在資料結構中是相當重要的概念,現在的資料量都非常龐大,基本上就利用Tree來加速資料的搜尋。在c++裡並沒有內建的Tree,APCS考試雖然會用到Tree的概念,但是,可以不必真的建Tree,而是要懂得Tree的運作原理。
當題目提到資料量無特定上限時,一般的陣列可能就會有問題,這時候vector就可以派上用場了。可以將資料利用push_back()放到最後,可以利用size(),知道目前有幾筆。也可以像陣列一樣直接取得某一筆資料。
#include <iostream>
#include <vector>
using namespace std;
main(){
vector<int> v;
v.push_back(500);
v.push_back(300);
v.push_back(700);
for (int i = 0; i< v.size(); i++){
cout << v[i] <<endl;
}
}