最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年05月16日 16:30:55   作者:fasterfish  
這篇文章主要為大家詳細介紹了C++利用鏈棧實現(xiàn)表達式求值的相關資料,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++利用鏈棧實現(xiàn)表達式求值的具體代碼,供大家參考,具體內容如下

#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之間的個位數(shù)并以#號結束"<<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++程序設計有所幫助。

您可能感興趣的文章:

相關文章

  • C++音樂播放按鈕的封裝過程詳解

    C++音樂播放按鈕的封裝過程詳解

    此篇文章用于記錄學習C++封裝音樂播放按鈕,封裝將對象的屬性和行為作為一個整體,表現(xiàn)生活中的事物、將屬性和行為加以權限控制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • C語言中棧的兩種實現(xiàn)方法

    C語言中棧的兩種實現(xiàn)方法

    棧的實現(xiàn)方式有兩種,一種方法是使用指針,而另一種方法則是使用數(shù)組,這篇文章主要介紹了C語言中棧的兩種實現(xiàn)方法,需要的朋友可以參考下
    2021-08-08
  • C++中防止頭文件重復包含的幾種方法

    C++中防止頭文件重復包含的幾種方法

    在 C/C++ 編程中,當一個項目比較大時,往往都是分文件,這時候有可能不小心把同一個頭文件 include 多次,或者頭文件嵌套包含,這些會導致一系列的問題,如符號重定義、編譯錯誤等,因此,防止頭文件的重復包含是至關重要的,本文給大家介紹了C++中防止頭文件重復包含的兩種方法
    2024-05-05
  • VS2010 boost標準庫開發(fā)環(huán)境安裝教程

    VS2010 boost標準庫開發(fā)環(huán)境安裝教程

    這篇文章主要為大家詳細介紹了VS2010 boost標準庫開發(fā)環(huán)境的安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C++11利用原子操作實現(xiàn)自旋鎖

    C++11利用原子操作實現(xiàn)自旋鎖

    C++自旋鎖是一種低層次的同步原語,用于保護共享資源的訪問,這篇文章主要為大家介紹了如何利用原子操作實現(xiàn)自旋鎖,感興趣的小伙伴可以了解下
    2023-09-09
  • C++類與對象深入之運算符重載與const及初始化列表詳解

    C++類與對象深入之運算符重載與const及初始化列表詳解

    運算符是程序中最最常見的操作,例如對于內置類型的賦值我們直接使用=賦值即可,因為這些編譯器已經幫我們做好了,但是對象的賦值呢?能直接賦值嗎
    2022-06-06
  • 初學C語言基本運算和表達式

    初學C語言基本運算和表達式

    在本文里小編給大家分享的是關于C語言基本運算和表達式的相關知識點,需要的朋友們跟著學習下。
    2019-08-08
  • 構造函數(shù)不能聲明為虛函數(shù)的原因及分析

    構造函數(shù)不能聲明為虛函數(shù)的原因及分析

    構造函數(shù)不需要是虛函數(shù),也不允許是虛函數(shù),因為創(chuàng)建一個對象時我們總是要明確指定對象的類型,盡管我們可能通過實驗室的基類的指針或引用去訪問它但析構卻不一定,我們往往通過基類的指針來銷毀對象
    2013-10-10
  • C++實現(xiàn)俄羅斯方塊游戲

    C++實現(xiàn)俄羅斯方塊游戲

    這篇文章主要為大家詳細介紹了C++實現(xiàn)俄羅斯方塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 用C語言實現(xiàn)五子棋小游戲

    用C語言實現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細介紹了用C語言實現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

楚雄市| 黄陵县| 湾仔区| 宜宾市| 西昌市| 民勤县| 兰坪| 云龙县| 同心县| 仪陇县| 梁平县| 宜阳县| 克东县| 新营市| 镇江市| 全州县| 乌拉特前旗| 民勤县| 永泰县| 水城县| 安图县| 钟祥市| 如东县| 驻马店市| 河津市| 西吉县| 外汇| 新泰市| 洪江市| 双峰县| 衡山县| 广元市| 瑞丽市| 齐河县| 灵丘县| 赤峰市| 灵寿县| 石家庄市| 马公市| 崇左市| 武城县|