七 資料結構之用棧實現四則運算表示式求值(逆波蘭)

2021-09-24 04:55:43 字數 1817 閱讀 8809

該計算器的實現只針對於一位數的整數,沒有對浮點數和多位整數進行方法實現,該程式只是進行闡述逆波蘭求值法的核心思想,對於棧的操作可以參考第四個文章(單棧的儲存結構)。

#include #define ok 1

#define error 0

#define maxsize 200

typedef int status;

typedef char numtype; //這裡假設該計算器所有的值都為int型別,對於浮點型別不做處理

typedef int inttype;

typedef struct

stack;

typedef struct

stackbyint;

//對棧進行初始化

void initbyint(stackbyint *s)

//進行壓棧

status pushbyint(stackbyint *s, inttype num)

//進行彈棧

status popbyint(stackbyint *s, inttype *num)

//對棧進行初始化

void init(stack *s)

//進行壓棧

status push(stack *s, numtype num)

//進行彈棧

status pop(stack *s, numtype *num)

//獲取棧頂元素

status gettop(stack s, numtype *num)

//判斷是否包含指定的符號

status iscontainsign(stack s, numtype num)

return error;

}status isleftbracket(stack s)

//判斷頂級元素是否大於要進行壓棧的元素

status istopmorethan(stack s, numtype num)

if(num == '*' || num == '/')

return error;

}//中綴表示式轉字尾表示式

void infixconvertsuffix(char infix, char *suffix, int len)

break;}}

push(&s, c);

break;

case ')':

numtype n;

pop(&s, &n);

while(n != '(')

if(n != '(')

break;

default:

*(suffix+j) = c;

j++;

break; } }

while(s.top != -1)

}//根據字尾表示式計算值

void calculatesuffix(char suffix, int *calcnum)

}if(s.top == 0)

}int main(void)

;char suffix[20];

int len = sizeof(infix)/sizeof(infix[0]);

infixconvertsuffix(infix, suffix, len);

printf("%s\n", suffix);

int calcnum;

calculatesuffix(suffix, &calcnum);

printf("%d\n", calcnum);

return 0;

}

資料結構 棧的四則運算實現

請各位大佬們賜教,目前該程式支援非負整數的四則運算僅支援 和 可以疊加多層。include include using namespace std bool isdigit char a intfd char a else if a a else if a else if a else if a i...

棧 四則運算表示式實現

棧的乙個常見應用,四則運算表示式求值。主要有兩個步驟 1,中綴轉字尾 2,字尾求值 實現起來比較簡單,我通過c 的容器stack實現一遍。從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,即稱為字尾表示式的一部分,若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於棧頂符號 乘除優先...

資料結構 四則運算

1.平時我們所接觸到的四則運算都是中序表示式,而要進行程式設計計算時要考慮符號優先順序神馬的很麻煩,故通常將其轉換為前序表示式或者後序表示式 中序表示式 2 3 2 1 3 4 1 前序表示式 23 21 3 41 後序表示式 23 21 341 2.中序轉前序 1.將中序表示式逆 1 4 3 1 ...