国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++利用鏈棧實現(xiàn)表達(dá)式求值

2020-05-23 14:04:24
字體:
供稿:網(wǎng)友
這篇文章主要為大家詳細(xì)介紹了C++利用鏈棧實現(xiàn)表達(dá)式求值的相關(guān)資料,感興趣的小伙伴們可以參考一下
 

本文實例為大家分享了C++利用鏈棧實現(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之間的個位數(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è)計有所幫助。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 银川市| 安龙县| 乐亭县| 庆元县| 扎鲁特旗| 永春县| 南木林县| 彰武县| 崇礼县| 兴城市| 中牟县| 武功县| 韩城市| 亳州市| 昭觉县| 双柏县| 筠连县| 定陶县| 休宁县| 霍林郭勒市| 浮梁县| 安平县| 虎林市| 广州市| 苏尼特左旗| 承德市| 郎溪县| 灌南县| 盐源县| 贵阳市| 昌平区| 闸北区| 万年县| 上饶县| 黄浦区| 昂仁县| 唐河县| 出国| 桦甸市| 通道| 青阳县|