Luận bàn về Stack

Stack là 1 cấu trúc dự liệu dạng thẳng tuân theo quy luật last in, first out (LIFO), có nghĩa là phần tử được đưa vào stack mới nhất sẽ là phần tử đầu tiên đc đưa ra khỏi stack.

Để hình dung dễ dàng cách hoạt động của stack, ta có thể liên tưởng đến hình ảnh 1 chồng đĩa. Ta luôn phải bỏ cái đĩa trên cùng (cái đĩa đc đưa vô mới nhất) ra khỏi chồng trước tiên.

Stack có các operation chính sau:

Ví dụ

Stack st
C++
stack<T> st;
Python
stack = [] # Use list

from collections import deque # Use collections.deque
stack = deque()

from queue import LifoQueue # Use queue module
stack = LifoQueue()
Java
Stack<T> stack = new Stack<T>();
JS/TS
const stack = [] // Use array

Solving problems using stack

Thực ra cũng chẳng có cách giải nào đặc biệt khác cho stack ngoài việc nắm rõ các operations của nó trong lòng bàn tay :>

Chủ yếu ta nên để ý xem yêu cầu đề bài phải xử lý 1 dãy data theo thứ tự như thế nào.

Nếu ta muốn lấy các phần tử ra khỏi container với thứ tự ngược lại với thứ tự khi ta thêm chúng, thì stack sẽ đc dùng. Còn nếu ta cần giữ nguyên thứ tự lấy ra khỏi container với đẩy phần tử vô, hay 1 đề bài ko cần quan trọng thứ tự xử lý các phần tử, thì ta sẽ ko thể dùng đc stack.

1 số câu hỏi mẫu, ae tham khảo: