麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

棧與隊(duì)列(二)之逆波蘭(RPN)計(jì)算器

2019-11-11 04:52:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

逆波蘭計(jì)算器(逆波蘭也是一種不需括號(hào)的后綴表達(dá)式)(這個(gè)計(jì)算器的寫法時(shí)間復(fù)雜度更加小,更有效率)

(棧的思想)逆波蘭(后綴表達(dá)式)(1-2)×(4+5)==1 2 - 4 5 + *

一、要求——實(shí)現(xiàn)對(duì)逆波蘭輸入表達(dá)式進(jìn)行計(jì)算(輸入正確)——支持帶小數(shù)點(diǎn)的數(shù)據(jù)

二、正常表達(dá)式--》逆波蘭表達(dá)式(這個(gè)理解需要自己總結(jié)理解,或者網(wǎng)上也有很多)

a+b--》a b +a+(b-c)--》a b c - +(有括號(hào)的先操作)a+(b-c)*d--》a b c - d * +(先乘除后加減,但有括號(hào)優(yōu)先級(jí)問(wèn)題所以先減(想想棧的思想就是分別放入兩個(gè)數(shù)據(jù)到棧然后放入運(yùn)算符時(shí)數(shù)據(jù)出棧計(jì)算,計(jì)算結(jié)果入棧))a+d*(b-c)--》a d b c - * +

三、圖片解析(1-2)*(4+5)==1 2 - 4 5 + *

四、實(shí)例RPN計(jì)算器代碼(棧思想)

/*************************************************************************    > File Name: RPN計(jì)算器.c    > Author: geeker    > Mail: 932834897@QQ.com    > Created Time: 2017年02月06日 星期一 20時(shí)16分15秒 ************************************************************************/#include<stdio.h>#include<stdlib.h>#include<math.h>#include<ctype.h>//提供函數(shù)isdigit判斷char參數(shù)是否為數(shù)字#define stacksize 20#define maxbuffer 10//最大緩沖區(qū)typedef double ElemType;typedef struct{    ElemType *base;    ElemType *top;    int maxsize;}sqStack;void InitStack(sqStack *s)//初始化{    s->base=(ElemType *)malloc(stacksize * sizeof(ElemType));    if(!s->base)        exit(0);    s->top=s->base;    s->maxsize=stacksize;}void Push(sqStack *s,ElemType e)//壓棧{    if(s->top-s->base>=s->maxsize)        return;    *(s->top)=e;    s->top++;}void Pop(sqStack *s,ElemType *e)//出棧{    if(s->top==s->base)        return;    *e=*--(s->top);}int StackLen(sqStack s)//(看清s不是指針),計(jì)算當(dāng)前容量{    return(s.top-s.base);//點(diǎn)是結(jié)構(gòu)不是指針}int main(){    sqStack s;    char c;    double d,e;    char str[maxbuffer];//緩沖區(qū),作用比如scanf輸入1234,計(jì)算機(jī)并不會(huì)覺(jué)得是1234,而會(huì)是字符1,字符2.    int i=0;    InitStack(&s);    PRintf("請(qǐng)按逆波蘭表示示輸入計(jì)算數(shù)據(jù),數(shù)據(jù)用空格隔開(kāi),以#作為結(jié)束標(biāo)志/n");    scanf("%c",&c);//怎么把c轉(zhuǎn)化成double數(shù)據(jù)       while(c!='#'){        while(isdigit(c)||c=='.'){//這個(gè)函數(shù)判斷char參數(shù)是否為數(shù)字(其實(shí)判斷ASCII是否在48-57之間),頭文件#include "ctype.h"            str[i++]=c;            str[i]='/0';//因?yàn)閿?shù)組沒(méi)有初始化,所以下一個(gè)數(shù)據(jù)給他初始化為0,此0為字符0,與數(shù)字0區(qū)別在于內(nèi)存空間等            if(i>=10){                printf("出錯(cuò),輸入單個(gè)數(shù)據(jù)過(guò)大!/n");                return -1;            }//緩沖區(qū)有最大范圍        scanf("%c",&c);        if(c==' '){//比如輸入12 3,接受空格表示12輸入結(jié)束了           d=atof(str);//這個(gè)函數(shù)功能:將字符串轉(zhuǎn)化為double型,需要頭文件#include "stdlib.h",傳入?yún)?shù)是字符串,返回double型數(shù)據(jù)           Push(&s,d);           i=0;//i初始化           break;        }        }        switch(c){//遇到數(shù)字就進(jìn)棧,遇到加減乘除就出棧計(jì)算            case'+': Pop(&s,&e); Pop(&s,&d); Push(&s,d+e);break;//將兩個(gè)數(shù)字拿出來(lái),再運(yùn)算,再把結(jié)果放進(jìn)去            case'-': Pop(&s,&e); Pop(&s,&d); Push(&s,d-e);break;//d-e原因:比如1-2,1先進(jìn)棧,所以2先出棧,所以后出棧-先出棧            case'*': Pop(&s,&e); Pop(&s,&d); Push(&s,d*e);break;            case'/': Pop(&s,&e); Pop(&s,&d);                     if(e!=0){                         Push(&s,d/e);break;//d/e與減同樣的道理,最重要是除法要判斷,除數(shù)不能為0                   }                     else{                         printf("/n出錯(cuò):除數(shù)為零!");                         return -1;                     }                     break;        }        scanf("%c",&c);    }    Pop(&s,&d);//把最終結(jié)果放在任何里面都行不一定d,自己重新定義一個(gè)也可以    printf("/n最終的計(jì)算結(jié)果為: %lf",d);    return 0;}//5-(6+7)*8+9/4//5-13*8+9/4//5-104+2.25//-99+2.25//-96.75//5 6 7 + 8 * - 9 4 / +//結(jié)果 -96.750000五、注意

因?yàn)橐陨蠈?shí)例代碼我實(shí)在linux下編寫,格式為UTF-8,如果將我的代碼復(fù)制粘貼去的話遇見(jiàn)中文亂碼的話可以將格式改為ANSI即可,若沒(méi)問(wèn)題那也沒(méi)啥事


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲第五色综合网 | 爱逼爱操综合网 | 青草久久久久 | 黄色视频a级毛片 | 免费在线观看成年人视频 | 欧美一级不卡视频 | 第一区免费在线观看 | 久久精品国产99国产精品亚洲 | 国产成人精品网站 | 美女网站黄在线观看 | 国产一级在线看 | 成人羞羞网站入口 | 欧美毛片免费观看 | 1024亚洲天堂 | 91社区在线观看 | 国产精品一区在线看 | 日韩在线欧美在线 | 福利一区二区三区视频在线观看 | 在线观看中文字幕av | av在线不卡免费 | 国产色视频在线观看免费 | 免费看污视频在线观看 | 国产精品av久久久久久网址 | 日本精品婷婷久久爽一下 | 久久91亚洲精品久久91综合 | 成人免费观看49www在线观看 | 欧美精品免费一区二区三区 | 国产精品av久久久久久久久久 | 永久久久 | 污视频在线免费播放 | 欧美性久久久 | 韩毛片| a级毛片免费观看在线播放 日本aaa一级片 | 二区三区在线观看 | 特级西西444www大精品视频免费看 | 国内精品一级毛片免费看 | 欧美黑人伦理 | 黄色片网站免费 | 久久不雅视频 | 国产成人av免费看 | 第四色成人网 |