Em hãy minh hoạ: Kiểm tra tính hợp lệ của dấu ngoặc trong chuỗi [2 * (4 + 3) - 5]
Em hãy minh hoạ:
Giải Chuyên đề Tin 12 Bài 1.4: Ứng dụng của ngăn xếp - Chân trời sáng tạo
Câu hỏi trang 22 Chuyên đề Tin học 12: 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.
Lời giải:
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.
Code như sau:
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_x = "[2 * (4 + 3) - 5]"
if kiem_tra_hop_le_ngoac(bieu_thuc_x):
print(f"Biểu thức {bieu_thuc_x} có dấu ngoặc hợp lệ.")
else:
print(f"Biểu thức {bieu_thuc_x} có dấu ngoặc không hợp lệ.")
Kết quả: 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.
Code như sau:
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_y)
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
Lời giải bài tập Chuyên đề Tin 12 Bài 1.3: Ứng dụng của hàng đợi hay, chi tiết khác: