Tính giá trị biểu thức hậu tố
Bạn đang xem: Tính giá trị biểu thức hậu tố
Các biểu thức đại số được trình diễn dưới dạng trung tố (Infix). Tuy nhiên, để máy tính tính được giá trị của một biểu thức thì cần màn biểu diễn các biểu thức đại số trường đoản cú trung tố sang một dạng khác là chi phí tố hoặc hậu tố. Nội dung bài viết trình bày về cách gửi từ biểu thức trung tố (Infix) sang hậu tố (Postfix) và tính toán biểu thức hậu tố bởi kỹ thuật Stack.
Postfix là gì?
Biểu thức hậu tố (Postfix) là thuật toán được trình diễn bằng cách đặt các toán tử ra sau các toán hạng.
Một vài ví dụ minh hoạ:
Infix | Postfix |
A / B – C * D | A B / C D * + |
A / ( B – C * D) | A B C D * - / |
A / (B – C) * D | A B C - / D * |
Thuật toán chuyển từ trung tố quý phái hậu tố
Khởi tạo Stack rỗng.Khởi tạo 2 chuỗi x và token; i, j theo lần lượt là index của Infix và Postfix.Duyệt vòng lặp for từ bỏ i = 1 cho tới cuối chuỗi Infix:Nếu Infix là toán hạng thì đưa vào Postfix.Nếu Infix là toán tử thì Push vào ngăn xếp S.Nếu Infix là “)” thì Pop vào ngăn xếp S (lấy giá trị bên trên đỉnh của S) sau đó đưa vào Postfix.Xem thêm: Xin Cậu Bé Bút Chì - Shin Cậu Bé Bút Chì 2019
Output: Postfix là biểu thức hậu tố.
Tính giá trị biểu thức hậu tốDuyệt biểu thức dạng chuỗi trường đoản cú trái sang trọng phải:
Dùng hàm isdigit để kiểm tra:
Nếu là toán hạng thì dùng Push() gửi vào ngăn xếp S.Nếu là toán tử thì Pop() 2 toán hạng trong ngăn xếp S ra, sau đó tính toán giá trị của chúng dựa vào toán tử này, sau đó Push() lại vào S.Thực hiện cho tới khi chạm chán kí từ bỏ kết thúc chuỗi.Kết quả của biểu thức chính là thành phần còn lại cuối cùng trong phòng xếp S.Code demo
Xét độ ưu tiên của các toán tử
int precedence(char x) x == "/"
Chuyển từ bỏ trung tố thanh lịch hậu tố
void infixtoPostfix(char infix<>, char postfix<>){Stack S;char x, token;int i = 0, j = 0; // i-index of infix,j-index of postfixinit(&S);for (i = 0; infix != " "; i++){token = infix;if (isalnum(token))postfixTính giá trị biểu thức hậu tố
float Evaluate(char *Postfix)struct Stack S;char *p;float op1, op2, result;S.TOP = -1; p = &Postfix<0>;while (*p != " ")result = Pop(&S);return result;Download demo
Postfix.zipBài thông thường series
Khi bạn bấm vào liên kết sản phẩm do yeahflashback.com khuyến cáo và cài đặt hàng, yeahflashback.com có thể nhận được hoa hồng. Điều này cung cấp yeahflashback.com sinh sản thêm các nội dung hữu ích. Read more.