Em hãy minh hoạ: a) Kiểm tra tính hợp lệ của dấu ngoặc trong chuỗi [2 * (4 + 3) - 5] bằng cách sử dụng ngăn xếp. b) Chuyển biểu thức (1 - 4) * 2 + 7 sang dạng hậu tố bằng cách sử dụng ngăn xếp.

KHÁM PHÁ

1. MỘT SỐ ỨNG DỤNG CỦA NGĂN XẾP

Câu 1: Em hãy minh hoạ:

a) Kiểm tra tính hợp lệ của dấu ngoặc trong chuỗi [2 * (4 + 3) - 5] bằng cách sử dụng ngăn xếp.

b) Chuyển biểu thức (1 - 4) * 2 + 7 sang dạng hậu tố bằng cách sử dụng ngăn xếp.


a) Kiểm tra tính hợp lệ của dấu ngoặc trong chuỗi [2 * (4 + 3) - 5] bằng cách sử dụng ngăn xếp

Để kiểm tra tính hợp lệ của dấu ngoặc trong biểu thức, chúng ta sẽ sử dụng ngăn xếp để đảm bảo rằng mỗi dấu mở ngoặc '(' đều có dấu đóng ngoặc ')' tương ứng.

def kiem_tra_hop_le_ngoac(bieu_thuc):

    stack = []

    for char in bieu_thuc:

        if char == '(':

           stack.append(char)

        elif char == ')':

            if not stack or stack[-1] != '(':

               return False

           stack.pop()

    return len(stack) == 0

 

bieu_thuc_a = "[2 * (4 + 3) - 5]"

 

if kiem_tra_hop_le_ngoac(bieu_thuc_a):

   print(f"Biểu thức {bieu_thuc_a} có dấu ngoặc hợp lệ.")

else:

   print(f"Biểu thức {bieu_thuc_a} có dấu ngoặc không hợp lệ.")

Kết quả của đoạn mã trên sẽ là:

Biểu thức [2 * (4 + 3) - 5] có dấu ngoặc hợp lệ.

b) Chuyển biểu thức (1 - 4) * 2 + 7 sang dạng hậu tố bằng cách sử dụng ngăn xếp

Để chuyển biểu thức sang dạng hậu tố (postfix), chúng ta sẽ sử dụng ngăn xếp để giúp quản lý và xếp các phép toán theo thứ tự đúng.

def chuyen_sang_hau_to(bieu_thuc):

    precedence = {'+': 1, '-': 1, '*': 2, '/': 2}

    stack = []

    output = []

    for char in bieu_thuc:

        if char.isdigit():

           output.append(char)

        elif char in precedence:

           while (stack and stack[-1] != '(' and

                  precedence[char] <= precedence.get(stack[-1], 0)):

               output.append(stack.pop())

           stack.append(char)

        elif char == '(':

           stack.append(char)

        elif char == ')':

           while stack and stack[-1] != '(':

               output.append(stack.pop())

           stack.pop()

    while stack:

       output.append(stack.pop())

    return ' '.join(output)

 

bieu_thuc_b = "(1 - 4) * 2 + 7"

 

bieu_thuc_hau_to = chuyen_sang_hau_to(bieu_thuc_b)

 

print(f"Biểu thức {bieu_thuc_b} sau khi chuyển sang dạng hậu tố là: {bieu_thuc_hau_to}")

Kết quả của đoạn mã trên sẽ là:

Biểu thức (1 - 4) * 2 + 7 sau khi chuyển sang dạng hậu tố là: 1 4 - 2 * 7 +

Như vậy, chúng ta đã thực hiện thành công cả hai yêu cầu của câu hỏi bằng cách sử dụng ngăn xếp để kiểm tra tính hợp lệ của dấu ngoặc và chuyển biểu thức sang dạng hậu tố.


Bình luận

Giải bài tập những môn khác