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