Câu hỏi tưởng chừng như đơn giản này lại làm bó tay rất nhiều bạn sinh viên khi đi phỏng vấn tìm việc.
Stack (ngăn xếp) và Queue (hàng đợi) là 2 cấu trúc dữ liệu cơ bản mà anh em nào học IT chắc cũng đều từng học qua trong môn Cấu trúc dữ liệu & Giải thuật
Nhưng cậu liệu đã từng đặt câu hỏi: học "2 ông thần" này thì làm được gì cho đời? Ngoại trừ thêm/xóa phần tử trong danh sách hay chưa?
Cùng mình tìm hiểu trong bài viết này nhé!
1. Stack (Ngăn xếp)
- Hoạt động theo nguyên lý Vào Sau Ra Trước - Last In First Out (LIFO)
- Giống như việc xếp chồng sách lên nhau. Quyển sách nào được xếp vào sau cùng (push), thì sẽ được lấy ra đầu tiên (pop)
- Một ví dụ trong thực tế anh em lập trình viên thường sử dụng Stack nhất, đó là trong quá trình debug. Chúng ta thường sẽ quan sát cửa sổ CallStack để xem các hàm gọi đến nhau như thế nào. Những hàm nằm trên cùng của CallStack sẽ là những hàm trả ra kết quả đầu tiên.
- Ngoài ra, stack còn được dùng để implement chức năng Undo / Redo (Ctrl + Z / Ctrl + Shift + Z) mà các cậu thường nhìn thấy trên các text editor. Tương tự như vậy với chức năng Go Back / Go Forward trên trình duyệt.
2. Queue (Hàng đợi):
- Hoạt động theo nguyên lý Vào Trước Ra Trước - First In First Out (FIFO)
- Giống như việc xếp hàng đợi mua vé xem phim. Ai xếp hàng trước thì sẽ mua được vé xem phim trước (Không tính ngoại lệ như vụ scandal TT lấn hàng bao rạp nha)
- Một ví dụ trong thực tế có thể áp dụng vào web app mảng Marketing của công ty, đó là chức năng gửi email marketing. Nếu tất cả người dùng thực hiện gửi email hàng loạt trong cùng một thời điểm, có thể gây quá tải dẫn đến tèo luôn con server gửi mail.
- Khi đó, chúng ta có thể sử dụng Queue để khắc phục tình trạng này. Khi người dùng gửi email, email đó sẽ được đẩy vào Queue. Nhờ đó chúng ta có thể kiểm soát được việc muốn gửi bao nhiêu email đi trong một thời điểm bằng cách giới hạn số message lấy ra từ Queue.