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

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

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

2020-01-26 14:36:01
字體:
供稿:網(wǎng)友

本文實(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ì)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 西林县| 应城市| 合山市| 沽源县| 会昌县| 永清县| 清苑县| 阿坝县| 唐山市| 广东省| 仁寿县| 商河县| 扎囊县| 无锡市| 丘北县| 武汉市| 连城县| 清苑县| 周至县| 新田县| 连南| 嘉善县| 庄浪县| 扬州市| 宁海县| 大渡口区| 海原县| 喀喇沁旗| 宣恩县| 徐水县| 贡嘎县| 上杭县| 东乡族自治县| 炎陵县| 安庆市| 兴文县| 阿拉尔市| 大宁县| 怀来县| 民和| 黑龙江省|