




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、#include <iostream>#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include<string.h>using namespace std;#define OK 1#define ERROR 0#define OVERFLOW -2#define STACK_SIZE 100#define STACKINCREMENT 10#define OPSIZE 7typedef double ElemType;typedef char SElemType;char
2、 opOPSIZE='+','-','*','/','(',')','#'char priorOPSIZEOPSIZE='>','>','<','<','<','>','>','>','>','<','<','<','
3、;>','>','>','>','>','>','<','>','>','>','>','>','>','<','>','>','<','<','<','<','
4、;<','=',' ','>','>','>','>',' ','>','>','<','<','<','<','<',' ','='typedef struct ElemType *top; ElemType *base; int Stacksize;OPND;
5、typedef struct SElemType *top; SElemType *base; int Stacksize;OPTR;void InitStack(OPND *S1) S1->base=(ElemType *)malloc(STACK_SIZE * sizeof(ElemType); if(NULL=S1->base) printf("Init Failed!n"); exit (OVERFLOW); else S1->top=S1->base; S1->Stacksize=STACK_SIZE; int StackEmpty(
6、OPND *S1) if(S1->top=S1->base) return 1; else return 0;int StackEmpty(OPTR *S2) if(S2->top=S2->base) return 1; else return 0;void InitStack(OPTR *S2) S2->base=(SElemType *)malloc(STACK_SIZE*sizeof(SElemType); if(NULL=S2->base) printf("Init Failed!n"); exit (OVERFLOW); els
7、e S2->top=S2->base; S2->Stacksize=STACK_SIZE; void Push(OPND *S1,ElemType e) if(S1->top-S1->base>=S1->Stacksize) S1->base=(ElemType *)realloc(S1->base,(S1->Stacksize+STACKINCREMENT)*sizeof(ElemType); if(!S1->base) exit(OVERFLOW); S1->top=S1->base+S1->Stacksi
8、ze; S1->Stacksize=S1->Stacksize+STACKINCREMENT; *S1->top=e; S1->top+;void Push(OPTR *S2,SElemType e) if(S2->top-S2->base>=S2->Stacksize) S2->base=(SElemType *)realloc(S2->base,(S2->Stacksize+STACKINCREMENT)*sizeof(SElemType); if(!S2->base) exit (OVERFLOW); S2->
9、top=S2->base+S2->Stacksize; S2->Stacksize+=STACKINCREMENT; *S2->top+=e;ElemType Pop(OPND *S1,ElemType *e) if(!StackEmpty(S1) S1->top=S1->top-1; *e=*S1->top; else return ERROR; return OK;SElemType Pop(OPTR *S2,SElemType *e) if(StackEmpty(S2) return ERROR; else *e=*-S2->top; re
10、turn OK;ElemType GetTop(OPND *S1,ElemType *e) if(!StackEmpty(S1) *e=*(S1->top-1); return OK;SElemType GetTop(OPTR *S2,SElemType *e) if(!StackEmpty(S2) *e=*(S2->top-1); return OK;bool Judege(char c,char *op)/判斷C是否為運算符 bool check=false; int i; for(i=0;i<OPSIZE;i+) if(c=opi) check = true; retu
11、rn check;int ReturnOpOrd(char c,char *op)/返回運算符c在OP中的位置 int i; for(i=0;i<OPSIZE;i+) if(c=opi) return i; return OK;char Precede(char theat1,char theat2)/g判斷運算符棧的棧頂運算符theta1和讀入的運算符theta2優先關系 return priorReturnOpOrd(theat1,op)ReturnOpOrd(theat2,op);double Operate(ElemType a,SElemType theat,ElemType
12、b)/操作數進行運算 switch(theat) case '+': return a+b; break; case '-': return a-b; break; case '*': return a*b; break; case '/': if(b!=0) return a/b; else printf("出錯!除數為0!n"); return ERROR; break; default: return 0; float EvaluateExpression(char *expression) OPND S
13、1; OPTR S2; char *c=expression; ElemType e1,e2,result,d; char temp10,r2; SElemType e; InitStack(&S1); InitStack(&S2); Push(&S2,'#'); strcpy(temp,"0"); while(*c!='#'|(GetTop(&S2,&e),e)!='#') if(!Judege(*c,op) r0=*c; r1='0' strcat(temp,r);
14、c+; if(Judege(*c,op) d=(float)atof(temp); Push(&S1,d); strcpy(temp,"0"); else switch(Precede( (GetTop(&S2,&e),e),*c) case '<': Push(&S2,*c); c+; break; case '=': Pop(&S2,&e); c+; break; case '>': Pop(&S1,&e1); Pop(&S1,&e2); Pop(&S2,&e); result=Operate(e2,e,e1); Push(&S1,result); bre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 紡紗生產過程中的清潔生產實踐考核試卷
- 小麥加工對麩皮營養價值的影響考核試卷
- 環保工程環保產品認證與標識考核試卷
- 燃氣具行業智能化服務與物聯網技術考核試卷
- 印刷機智能檢測與控制系統的行業發展前景考核試卷
- 海洋油氣開采項目的生命周期管理考核試卷
- 內蒙古民族大學《測繪學概論》2023-2024學年第二學期期末試卷
- 江西財經大學《介入放射學》2023-2024學年第二學期期末試卷
- 山東管理學院《安裝工程估價及軟件應用水暖課程設計》2023-2024學年第二學期期末試卷
- 四川大學《數字特技》2023-2024學年第二學期期末試卷
- 眼視光員工培訓
- 《職業衛生》專題培訓
- 上海虹口區江灣鎮街道社區工作者招聘筆試真題2023
- 銀行辦公大樓物業服務投標方案投標文件(技術方案)
- 寵物醫院安樂協議書范文模板
- 鄉村振興大數據基礎數據元與代碼集
- 下水疏通施工合同模板
- 酒店消防疏散應急預案
- 護理中醫院感染問題課件
- 五年級語文下冊期中復習課件
- 布置我們的家(課件)三年級下冊綜合實踐活動滬科黔科版
評論
0/150
提交評論