C++利用鏈棧實(shí)現(xiàn)表達(dá)式求值
更新時(shí)間:2016年05月16日 16:30:55 作者:fasterfish
這篇文章主要為大家詳細(xì)介紹了C++利用鏈棧實(shí)現(xiàn)表達(dá)式求值的相關(guān)資料,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C++利用鏈棧實(shí)現(xiàn)表達(dá)式求值的具體代碼,供大家參考,具體內(nèi)容如下
#include<iostream.h> typedef int Status; typedef char Cstack; #define OK 1 #define ERROR 0 typedef struct StackNode { Cstack data; struct StackNode *next; }StackNode,*LinkStack; Status InitStack(LinkStack &S) { S=NULL; return OK; } Status Push(LinkStack &S,Cstack e) { StackNode *p; p=new StackNode; p->data=e; p->next=S; S=p; return OK; } Status Pop(LinkStack &S,Cstack &e) { StackNode *p; if(S==NULL) return ERROR; e=S->data; p=S; S=S->next; delete p; return OK; } Cstack GetTop(LinkStack S) { if(S!=NULL) return S->data; } Status In(Cstack ch) { cin>>ch; if(ch=='+') return OK; else if(ch=='-') return OK; else if(ch=='*') return OK; else if(ch=='/') return OK; else if(ch=='#') return OK; else return ERROR; } Cstack Precede(Cstack t1,Cstack t2) { switch(t1) { case '+': switch(t2) { case '+':return '>';break; case '-':return '>';break; case '*':return '<';break; case '/':return '<';break; case '(':return '<';break; case ')':return '>';break; case '#':return '>';break; } break; case '-': switch(t2) { case '+':return '>';break; case '-':return '>';break; case '*':return '<';break; case '/':return '<';break; case '(':return '<';break; case ')':return '>';break; case '#':return '>';break; } break; case '*': switch(t2) { case '+':return '>';break; case '-':return '>';break; case '*':return '>';break; case '/':return '>';break; case '(':return '<';break; case ')':return '>';break; case '#':return '>';break; } break; case '/': switch(t2) { case '+':return '>';break; case '-':return '>';break; case '*':return '>';break; case '/':return '>';break; case '(':return '<';break; case ')':return '>';break; case '#':return '>';break; } break; case '(': switch(t2) { case '+':return '<';break; case '-':return '<';break; case '*':return '<';break; case '/':return '<';break; case '(':return '<';break; case ')':return '=';break; case '#':return '>';break; } break; case ')': switch(t2) { case '+':return '>';break; case '-':return '>';break; case '*':return '>';break; case '/':return '>';break; case '(':return '=';break; case ')':return '>';break; case '#':return '>';break; } break; case '#': return '='; break; } } Cstack Operator(Cstack t1,Cstack t2,Cstack t3) { t1=t1-48; t3=t3=48; int c; switch(t2) { case '+': c=t1+t2+48; return c; break; case '-': c=t1-t2+48; return c; break; case '*': c=t1*t2+48; return c; break; case '/': c=t1/t2+48; return c; break; } } void main() { LinkStack OPTR,OPAN; Cstack cha1,cha2,x,cha,thea; InitStack(OPTR); InitStack(OPAN); Push(OPTR,'#'); cout<<"輸入表達(dá)式的中間值及最終結(jié)果局限于0~9之間的個(gè)位數(shù)并以#號結(jié)束"<<endl; while(cha!='#'||GetTop(OPTR)!='#') { cin>>cha; if(!In(cha)) Push(OPAN,cha); else switch(Precede(GetTop(OPTR),cha)) { case '<': Push(OPTR,cha); cin>>cha; break; case '>': Pop(OPTR,thea); Pop(OPAN,cha1); Pop(OPAN,cha2); Push(OPAN,(cha1,thea,cha2)); break; case '=': Pop(OPTR,x); break; } } cout<<GetTop(OPAN)<<endl; return; }
以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)C++程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:
相關(guān)文章
C語言實(shí)現(xiàn)刪除某一個(gè)數(shù)組值的方法
這篇文章主要給大家分享C語言數(shù)組中刪除數(shù)組中某個(gè)值的方法,既然要學(xué)習(xí)刪除數(shù)組中的元素,我們就必須得先知道數(shù)組中有哪些元素。同時(shí)還要定義一個(gè)變量,并將需要?jiǎng)h除的元素賦值給那個(gè)變量。下面來看看文章的詳細(xì)內(nèi)容吧2021-11-11