Nghệ thuật lập trình - Stack và Queue
Mục lục
- Giới thiệu về Stack và Queue
- Tạo và thao tác với Stack
2.1. Khởi tạo Stack
2.2. Thêm phần tử vào Stack (Push)
2.3. Lấy phần tử ra khỏi Stack (Pop)
2.4. Xem phần tử đầu Stack (Top)
- Ứng dụng của Stack
3.1. Đảo ngược chuỗi
3.2. Kiểm tra dấu ngoặc
- Tạo và thao tác với Queue
4.1. Khởi tạo Queue
4.2. Thêm phần tử vào Queue (Enqueue)
4.3. Lấy phần tử ra khỏi Queue (Dequeue)
4.4. Xem phần tử đầu và cuối Queue
- Ứng dụng của Queue
5.1. Mô phỏng hàng đợi
5.2. Lên lịch in ấn
🚀 Bài viết này sẽ giúp bạn hiểu về cấu trúc dữ liệu Stack và Queue, cùng với các ứng dụng thực tế của chúng trong lập trình. Hãy cùng khám phá nhé!
📚 Stack và Queue trong lập trình
Stack và Queue đều là các kiểu cấu trúc dữ liệu giúp tổ chức và quản lý dữ liệu một cách hiệu quả. Chúng cho phép chúng ta thực hiện các thao tác như thêm, lấy và kiểm tra dữ liệu một cách nhanh chóng và dễ dàng.
1. Giới thiệu về Stack và Queue
Stack (Ngăn xếp) là một cấu trúc dữ liệu có phương thức hoạt động LIFO (Last In First Out), tức là phần tử cuối cùng được thêm vào sẽ được lấy ra đầu tiên.
Queue (Hàng đợi) là một cấu trúc dữ liệu có phương thức hoạt động FIFO (First In First Out), tức là phần tử đầu tiên được thêm vào sẽ được lấy ra đầu tiên.
2. Tạo và thao tác với Stack
2.1 Khởi tạo Stack
Để tạo một Stack, chúng ta cần khởi tạo một biến Stack rỗng.
stack = []
2.2 Thêm phần tử vào Stack (Push)
Để thêm một phần tử vào Stack, chúng ta sử dụng phương thức .append()
:
stack.append(element)
2.3 Lấy phần tử ra khỏi Stack (Pop)
Để lấy phần tử trên cùng của Stack ra, chúng ta sử dụng phương thức .pop()
:
top_element = stack.pop()
2.4 Xem phần tử đầu Stack (Top)
Để xem phần tử đầu tiên của Stack mà không xóa nó, chúng ta sử dụng phương thức [-1]
:
top_element = stack[-1]
3. Ứng dụng của Stack
3.1 Đảo ngược chuỗi
Một trong những ứng dụng phổ biến của Stack là đảo ngược chuỗi. Chúng ta có thể sử dụng Stack để lấy các ký tự của chuỗi theo thứ tự đảo ngược:
def reverse_string(string):
stack = []
reversed_string = ""
for char in string:
stack.append(char)
while stack:
reversed_string += stack.pop()
return reversed_string
3.2 Kiểm tra dấu ngoặc
Stack cũng rất hữu ích trong việc kiểm tra tính hợp lệ của một biểu thức với các dấu ngoặc. Chúng ta có thể sử dụng Stack để kiểm tra xem các dấu ngoặc mở và đóng đã được đặt đúng thứ tự hay chưa.
def check_parentheses(expression):
stack = []
opening_brackets = ["(", "{", "["]
closing_brackets = [")", "}", "]"]
for char in expression:
if char in opening_brackets:
stack.append(char)
elif char in closing_brackets:
if not stack or opening_brackets.index(stack.pop()) != closing_brackets.index(char):
return False
return not stack
4. Tạo và thao tác với Queue
4.1 Khởi tạo Queue
Để tạo một Queue, chúng ta cần khởi tạo một biến Queue rỗng.
queue = []
4.2 Thêm phần tử vào Queue (Enqueue)
Để thêm một phần tử vào Queue, chúng ta sử dụng phương thức .append()
:
queue.append(element)
4.3 Lấy phần tử ra khỏi Queue (Dequeue)
Để lấy phần tử đầu tiên của Queue ra, chúng ta sử dụng phương thức .pop(0)
:
first_element = queue.pop(0)
4.4 Xem phần tử đầu và cuối Queue
Để xem phần tử đầu tiên và cuối cùng của Queue mà không xóa chúng, chúng ta sử dụng phương thức [0]
và [-1]
:
first_element = queue[0]
last_element = queue[-1]
5. Ứng dụng của Queue
5.1 Mô phỏng hàng đợi
Queue thường được sử dụng để mô phỏng hàng đợi trong các tình huống mà tỷ lệ việc đưa dữ liệu vào và lấy ra không đồng đều. Dùng Queue, chúng ta có thể thêm dữ liệu vào phía cuối hàng đợi và lấy dữ liệu ra từ phía đầu hàng đợi, giúp tổ chức và quản lý dữ liệu một cách hợp lý.
5.2 Lên lịch in ấn
Queue cũng được sử dụng trong việc lên lịch in ấn. Khi có nhiều công việc in cần được thực hiện, Queue giúp xếp hàng chờ các tác vụ in ấn và in chúng theo đúng thứ tự mà chúng được gửi đến.