C++利用鏈棧實現運算式求值_C 語言

來源:互聯網
上載者:User

本文執行個體為大家分享了C++利用鏈棧實現運算式求值的具體代碼,供大家參考,具體內容如下

#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<<"輸入運算式的中間值及最終結果局限於0~9之間的個位元並以#號結束"<<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;}

以上就是本文的全部內容,希望對大家學習C++程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.