培訓(xùn)啦 問(wèn)答 留學(xué)

用c語(yǔ)言的棧來(lái)編寫逆波蘭公式的程序

發(fā)布時(shí)間: 2025年04月23日 15:55

【2025年出國(guó)留學(xué)、雅思、托福、小語(yǔ)種、留學(xué)考試】專業(yè)咨詢 >>

您好!我是劉老師,請(qǐng)問(wèn)您想了解出國(guó)留學(xué)、語(yǔ)言考試嗎?

點(diǎn)擊咨詢
如題,代碼如下,歡迎探討?。?![code=C/C++][/code]#include <stdio.h>typedef int ElemType; #define MAXNUM 16struct stack{ ElemType data[MAXNUM]; int top;};void StackInit(struct stack *stack){ int i = 0; for(;i < MAXNUM;i++) { stack->data[i] = 0; } stack->top = 0; }void StackPush(struct stack *stack,ElemType c){ if(MAXNUM == stack->top) { printf("The stack is full "); return; } stack->data[stack->top++] = c;}ElemType StackPop(struct stack *stack){ if(0 == stack->top) { printf("The stack is empty "); return 0; } return stack->data[--stack->top];}void Postfixevaluation(struct stack *stack){ return; }int ChangeToPostfix(char *str){ int i = 0,flag = 0; int c,ch; struct stack ch_stack; struct stack op_stack; StackInit(&ch_stack); StackInit(&op_stack); while( != (c = *(str + i))) { if((* == c) || (/ == c) || (( == c)) { flag = 0; StackPush(&op_stack,c); } else if() == c) { flag = 0; while(( != (c = StackPop(&op_stack))) { StackPush(&ch_stack,c); } if(0 == op_stack.top) { printf("the ( hasnt found when the ) come in! "); return -1; } } else if((+ == c)|| (- == c)) { flag = 0; if(0 != op_stack.top) { while(( != (ch = StackPop(&op_stack))) { StackPush(&ch_stack,ch); if(0 == op_stack.top) { break; } } } StackPush(&op_stack,c); } else if((c >= 0) && (c <= 9)) { if(0 == flag) { StackPush(&ch_stack,(c - 0)); flag = 1; } else { StackPush(&ch_stack,10 * StackPop(&ch_stack) + (c - 0)); } } i++; } while(0 != op_stack.top) { StackPush(&ch_stack,StackPop(&op_stack)); } Postfixevaluation(&ch_stack); for(i = 0;i < ch_stack.top;i++) { if(+ == ch_stack.data[i]) { printf("+.."); } else if(- == ch_stack.data[i]) { printf("-.."); } else if(* == ch_stack.data[i]) { printf("*.."); } else if(/ == ch_stack.data[i]) { printf("/.."); } else { printf("%d..",ch_stack.data[i]); } } return 0;}int main(void){ char str[] = "12 + 34 * 435 - 5 / 1"; printf("The result should be : "); printf("12 34 435 * + 5 1 / - [= 8] "); if(-1 == ChangeToPostfix(str)) {printf("ChangeToPostfix() error ");return 1;}return 0;}
溫馨提示:
本文【用c語(yǔ)言的棧來(lái)編寫逆波蘭公式的程序】由作者教培參考提供。該文觀點(diǎn)僅代表作者本人,培訓(xùn)啦系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)空間服務(wù),若存在侵權(quán)問(wèn)題,請(qǐng)及時(shí)聯(lián)系管理員或作者進(jìn)行刪除。
我們采用的作品包括內(nèi)容和圖片部分來(lái)源于網(wǎng)絡(luò)用戶投稿,我們不確定投稿用戶享有完全著作權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果侵犯了您的權(quán)利,請(qǐng)聯(lián)系我站將及時(shí)刪除。
內(nèi)容侵權(quán)、違法和不良信息舉報(bào)
Copyright @ 2025 培訓(xùn)啦 All Rights Reserved 版權(quán)所有.