Chuyển biểu thức dạng trung tố sang hậu tố
Yêu cầu: Cho biểu thức 2 * (4 + 3) - 5. Hãy viết chương trình để chuyển một biểu thức dạng trung tố sang biểu thức dạng hậu tố với giả sử toán hạng, toán tử trong chuỗi chỉ gồm 1 kí tự.
Chạy chương trình trên.
Dữ liệu vào: chuỗi biểu thức dạng trung tố.
Dữ liệu ra: chuỗi biểu thức dạng hậu tố.
Chuyển biểu thức dạng trung tố sang hậu tố
Yêu cầu: Cho biểu thức 2 * (4 + 3) - 5. Hãy viết chương trình để chuyển một biểu thức dạng trung tố sang biểu thức dạng hậu tố với giả sử toán hạng, toán tử trong chuỗi chỉ gồm 1 kí tự.
Chạy chương trình trên.
Dữ liệu vào: chuỗi biểu thức dạng trung tố.
Dữ liệu ra: chuỗi biểu thức dạng hậu tố.
Câu hỏi trong đề: Chuyên đề Tin 12 CTST Bài 1.4. Ứng dụng của ngăn xếp !!
Quảng cáo
Trả lời:
Sử dụng hàm isOperator() để kiểm tra kí tự là toán tử, hàm getPriority() để xác định độ ưu tiên của toán tử, hàm inFixtoPostfix() để chuyển biểu thức dạng trung tố sang dạng hậu tố
Hàm kiểm tra kí tự có phải là toán tử hay không:
def isoperator (c):
return c in '+-*/^'
Hàm kiểm tra độ ưu tiên của toán tử:
def getPriority (op):
if op '+' or op ==
return 1
elif op ==
return 2
elif op:
else:
return 3
return 0
or op '/':
chuyển biểu thức dạng trung tổ sang dạng hậu tố:
#Hàm chuyển biểu thức trung tổ sang hậu tổ
def inFixtoPostfix(infix):
infix infix.replace('[', '(').replace('1', ')').replace('(', '(').
Replace (‘}’, ‘)’)
Lace('}', ')')
stack initStack()
postfix = ""
for c in infix:
if c =='':
continue
#Bỏ qua khoảng trắng
#Nếu kí tự là toán hạng, thêm vào chuỗi hậu tố
if c.isalpha() or c.isdigit():
postfix += c
#Nếu kí tự là '(', thêm vào stack
elif (':
push(stack, c)
#Nếu kí tự là ')'
elif c == ')': #Lấy ra khỏi stack và thêm vào postfix cho đến khi gặp ( while not isEmptyStack(stack) and top (stack) != '(':
postfix += pop(stack)
pop(stack)
elif isOperator (c): #Toán tử
if c != '^':
while not isEmptyStack(stack) and getPriority(c) <= getPriority(top(stack)): postfix + pop (stack)
postfix + pop(stack)
push(stack, c)
stack): áng tạo
while not isEmptyStack (stack):
postfix += pop(stack)
return postfix
infix = '2* (4 + 3) - 5'
postfix = inFixtoPostfix (infix)
print("Biểu thức hậu tố: " postfix)
infix = '2^2^3'
postfix = inFixtoPostfix(infix)
print("Biểu thức hậu tố: ", postfix)
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Đang tải chế độ Học...
Hot: 1000+ đề thi giữa kì 1 lớp 1-12 đầy đủ các môn (Update 2026) (chỉ từ 60k). Tải ngay
Đăng ký VIP để học và luyện thi không giới hạn
Trọn bộ quyền lợi trên Vietjack, trong một tài khoản.
- Phòng luyện thi cấp tốc: ĐGNL - ĐGTD, Tốt nghiệp THPT, Ôn vào 10, Ôn vào 6, Ôn Giữa kì/Cuối kì
- Hơn 200K đề thi thử, đề minh hoạ, chính thức các năm
- Với 3tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
- Tải xuống đề thi [DOCX] với đầy đủ đáp án
- Xem hàng ngàn bài giảng đính kèm củng cố thêm kiến thức
- Bao gồm tất cả các bậc từ Tiểu học đến Đại học
- Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện
- Đăng ký ngay
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
1. Sử dụng lệnh inFix = inFix[:-1] để đảo ngược chuỗi biểu thức trung tố. Ví dụ, *(2 – 7/3) * (2/8 – 4)" được chuyển thành ")4–8/2(*)3/7–2(".
2. Thay thế các dấu đóng ngoặc thành dấu mở ngoặc và dấu mở ngoặc thành dấu đóng ngoặc trong chuỗi biểu thức đã đảo ngược trong bước 1.
Ví dụ, chuỗi ")4–8/2(*)3/7−2(" được chuyển thành "(4 – 8/2) * (3/7 – 2)".
3. Gọi hàm inFixtoPostfix() chuyển từ biểu thức dạng trung tố sang dạng hậu tố. 4. Đảo ngược chuỗi biểu thức kết quả của 3.
5. Kết thúc.
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
#Mã giả kiểm tra dấu ngoặc hợp lệ trong chuỗi biểu thức
checkParentheses (s)
openParentheses = ["[","{","("] closeParentheses = ["]","}",")"] khởi tạo ngăn xếp stack rỗng for c in s:
if c là là dấu mở ngoặc:
Thêm c vào stack
elif c là dấu đóng ngoặc:
if stack rỗng:
return False
#Danh sách các ngoặc mở
#Danh sách các ngoặc đóng
else:
pos = vị trí của c trong closeParentheses
c1 là dấu mở ngoặc ở vị trí pos (tương ứng với c) c2 là dấu mở ngoặc lấy ra từ stack
if c1 khác c2:
return False
if stack rỗng:
return True
else:
return False
* Hàm kiểm tra dấu ngoặc hợp lệ trong chuỗi:
#Hàm kiểm tra dấu ngoặc hợp lệ trong chuỗi biểu thức
def checkParentheses(s):
openParentheses = ["[","",""] closeParentheses = ["]","}",")"] stack initStack() for c in s:
if c in openParentheses: push(stack, c)
elif c in closeParentheses:
if isEmptyStack(stack):
return False
else:
#Danh sách các kí tự ngoặc mở #Danh sách các kí tự ngoặc đồng #Khởi tạo ngăn xếp rỗng #Duyệt mọi kí tự trong s
#Kiểm tra nếu c là dấu mở ngoặc
#Thêm c vào stack
#Ngược lại, nếu c là dấu đóng ngoặc
pos = closeParentheses.index(c) #Lấy vị trí của kí tự ngoặc đóng
c1 = openParentheses[pos]
c2 = pop(stack)
if c1 = c2:
return False
if isEmptyStack(stack):
return True
else:
return False
#Nếu stack rỗng, dấu ngoặc hợp lệ
#Ngược lại, chuỗi có dấu ngoặc không hợp lệ
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng nhập để xem lời giải
Lưu tiến độ và luyện tập hiệu quả hơn. Hoàn toàn miễn phí!
Lời giải
Bạn cần đăng ký gói VIP ( giá chỉ từ 250K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.
Đăng ký để học cùng Vietjack. Hoàn toàn miễn phí!
Bằng việc đăng ký, bạn đồng ý với Điều khoản sử dụng và Chính sách bảo mật của Vietjack.