C++利用鏈棧實(shí)現(xiàn)表達(dá)式求值
本文實(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ù)并以#號(hào)結(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ì)有所幫助。
上一篇:C++無法重載點(diǎn)符號(hào)、::、sizeof等的原因
欄 目:C語言
下一篇:C++簡單輸出鉆石菱形圖效果
本文標(biāo)題:C++利用鏈棧實(shí)現(xiàn)表達(dá)式求值
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2287.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類算法
- 01-10全排列算法的非遞歸實(shí)現(xiàn)與遞歸實(shí)現(xiàn)的方法(C++)
- 01-10C++大數(shù)模板(推薦)
- 01-10淺談C/C++中的static與extern關(guān)鍵字的使用詳解
- 01-10深入C/C++浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式詳解
- 01-10深入理解C/C++混合編程


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 04-02jquery與jsp,用jquery
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10delphi制作wav文件的方法


