Tossaporn Saengja

Stack & Queue

Stack

https://media.geeksforgeeks.org/wp-content/uploads/geek-stack-1.png

(https://media.geeksforgeeks.org/wp-content/uploads/geek-stack-1.png)

ตัวอย่างการใช้ vector เพื่อ implement stack

#include <bits/stdc++.h>

using namespace std;

void printvec(vector<int> &a) {
  for (auto x : a)
    printf("%d ", x);
  printf("\n");
}

int main() {
  // stack
  vector<int> a;
  a.push_back(1);
  a.push_back(2);
  a.push_back(3);
  a.push_back(4);
  printvec(a); // 1 2 3 4
  a.pop_back();
  a.pop_back();
  printvec(a); // 1 2
}

Queue

https://media.geeksforgeeks.org/wp-content/uploads/geek-queue-1.png

(https://media.geeksforgeeks.org/wp-content/uploads/geek-queue-1.png)

Stack vs Queue

Stack Queue
LIFO FIFO
one pointer (top) two pointers (front, rear)
push enqueue
pop dequeue
recursion sequential

Deque (double-ended queue)

ตัวอย่าง deque

#include <bits/stdc++.h>

using namespace std;

void printq(deque<int> &a) {
  for (auto x : a)
    printf("%d ", x);
  printf("\n");
}

int main() {
  // double-ended queue
  deque<int> b;
  b.push_back(1);
  b.push_back(2);
  b.push_back(3);
  b.push_back(4);
  printq(b); // 1 2 3 4
  b.pop_front();
  b.pop_front();
  printq(b); // 3 4
  b.pop_back();
  printq(b); // 3
}