Tính giá trị biểu thức hậu tố

     
Ứng dụng chống xếp stack để gửi từ biểu thức trung tố (Infix) quý phái hậu tố (Postfix) và code mẫu mã tính giá trị biểu thức cùng với C++.

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ạ:

InfixPostfix
A / B – C * DA B / C D * +
A / ( B – C * D)A B C D * - /
A / (B – C) * DA 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))postfix = token;elseif (token == "(")Push(&S, "(");elseif (token == ")")while ((x = Pop(&S)) != "(")postfix = x;else{while (precedence(token)

Tí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.zip

Bà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.
*

Home


Links


Policy


yeahflashback.com Co., Ltd