📚
STL

stack & queue

LIFO Aur FIFO Containers
💡 stack ek plates ka dher hai — jo plate sabse upar rakhi (last), wahi sabse pehle uthegi (LIFO). queue ek line/cinema-ticket-line jaisi hai — jo sabse pehle line mein aaya, wahi sabse pehle serve hoga (FIFO).

std::stack (LIFO — Last In First Out) push()/pop()/top() deta hai — sirf top element ko access kar sakte ho. std::queue (FIFO — First In First Out) push()/pop()/front()/back() deta hai — front se remove hota hai, back mein add hota hai.

Dono "container adapters" hain — internally kisi doosre container (default: deque) ko use karke ek limited interface dete hain, jo unke intended use-case ke liye clean aur mistake-proof hai.

#include <stack>
#include <queue>
using namespace std;

int main() {
  stack<int> st;
  st.push(1); st.push(2); st.push(3);
  cout << st.top() << endl;   // 3 (last pushed)
  st.pop();
  cout << st.top() << endl;   // 2

  queue<int> q;
  q.push(1); q.push(2); q.push(3);
  cout << q.front() << endl;  // 1 (first pushed)
  q.pop();
  cout << q.front() << endl;  // 2
  return 0;
}
📚
stack ek plates ka dher hai — jo plate sabse upar rakhi (last), wahi sabse pehle uthegi (LIFO). queue ek line/cinema-ticket-line jaisi hai — jo sabse pehle line mein aaya, wahi sabse pehle serve hoga (FIFO).
1 / 2
⚡ झट से Recap
  • stack = LIFO (push/pop/top)
  • queue = FIFO (push/pop/front/back)
  • Dono "container adapters" hain — limited, purpose-built interface
इस page में (2 subtopics)

priority_queue ek special queue hai jo hamesha sabse "bada" (default: max-heap) element top par rakhta hai — insertion order matter nahi karta, top() hamesha current maximum deta hai. Internally ek heap data structure use karta hai.

#include <queue>

priority_queue<int> pq;
pq.push(3); pq.push(1); pq.push(4); pq.push(1); pq.push(5);

while (!pq.empty()) {
  cout << pq.top() << " ";  // 5 4 3 1 1 — descending order!
  pq.pop();
}
💡Tip: priority_queue<int, vector<int>, greater<int>> min-heap banata hai (sabse chhota top par) — default max-heap ke ulat. Task scheduling, Dijkstra's algorithm jaisi jagah bahut use hota hai.

deque (header <deque>) dono ends (front aur back) se O(1) insert/remove support karta hai — vector sirf end se fast hai, deque dono taraf se. stack aur queue internally by default deque use karte hain.

#include <deque>

deque<int> dq;
dq.push_back(1);
dq.push_front(0);
dq.push_back(2);
// dq: 0, 1, 2

for (int n : dq) cout << n << " ";