亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言中棧和隊列實現表達式求值的實例

2020-01-26 13:57:49
字體:
來源:轉載
供稿:網友

C語言中棧和隊列實現表達式求值的實例

實現代碼:

#include<stdio.h> #include<stdlib.h>  #define OK 1 #define ERROR 0 #define STACK_SIZE 20 #define STACK_INCREMENT 10 #define QUEUE_SIZE 20  typedef int Status;  typedef char StackElemtype; typedef struct Stack{   StackElemtype* base;   StackElemtype* top;   int stackSize; }Stack; Status StackInit(Stack* s){   s->base = (StackElemtype*)malloc(sizeof(StackElemtype) * STACK_SIZE);   if( !s->base )     return ERROR;   s->top = s->base;   s->stackSize = STACK_SIZE;   return OK; } Status Pop(Stack* s,StackElemtype* value){   if( s->base == s->top ){     printf("/nstack empty/n");     return ERROR;   }   *value = *(--(s->top));   return OK; } Status Push(Stack* s,StackElemtype value){   if( s->top - s->base == s->stackSize){          s->base = (StackElemtype*)realloc(s->base,sizeof(StackElemtype) * (STACK_INCREMENT + STACK_SIZE));     if( !s->base )       return ERROR;     s->top = s->base + STACK_SIZE;     s->stackSize = STACK_SIZE + STACK_INCREMENT;   }   *(s->top) = value;   s->top++;   return OK; } int StackLength(Stack s){   return s.top - s.base; }  typedef double StackElemtype_ForValueExperssion; typedef struct Stack_2{   StackElemtype_ForValueExperssion* base;   StackElemtype_ForValueExperssion* top;   int stackSize; }Stack_2; Status StackInit_2(Stack_2* s){   s->base = (StackElemtype_ForValueExperssion*)malloc(sizeof(StackElemtype_ForValueExperssion) * STACK_SIZE);   if( !s->base )     return ERROR;   s->top = s->base;   s->stackSize = STACK_SIZE;   return OK; } Status Pop_2(Stack_2* s,StackElemtype_ForValueExperssion* value){   if( s->base == s->top ){     printf("/nstack empty/n");     return ERROR;   }   *value = *(--(s->top));   return OK; } Status Push_2(Stack_2* s,StackElemtype_ForValueExperssion value){   if( s->top - s->base == s->stackSize){     s->base = (StackElemtype_ForValueExperssion*)realloc(s->base,sizeof(StackElemtype_ForValueExperssion) * (STACK_INCREMENT + STACK_SIZE));     if( !s->base )       return ERROR;     s->top = s->base + STACK_SIZE;     s->stackSize = STACK_SIZE + STACK_INCREMENT;   }   *(s->top) = value;   s->top++;   return OK; }  typedef double QueueElemtype; typedef char  QueueOperatorValue; typedef struct QueueNode{   QueueElemtype data;   QueueOperatorValue operator;   struct QueueNode* next;   int flag; }QueueNode,*QueueNodePtr; typedef struct Queue{   QueueNodePtr front;   QueueNodePtr rear; }Queue;  Status QueueInit(Queue* q){   q->front = (QueueNodePtr)malloc(sizeof(QueueNode));   if( !q->front )     return ERROR;   q->rear = q->front;   q->rear->next = NULL;   return OK; } Status QueueInsert(Queue* q,QueueElemtype value){   QueueNodePtr new;   new = (QueueNodePtr)malloc(sizeof(QueueNode));   if( !new )     return ERROR;   new->data = value;   new->flag = 1;   new->next = NULL;   q->rear->next = new;   q->rear = new;   return OK; } Status QueueInsert_operatorValue(Queue* q,QueueOperatorValue value){   QueueNodePtr new;   new = (QueueNodePtr)malloc(sizeof(QueueNode));   if( !new )     return ERROR;   new->operator = value;   new->flag = 0;   new->next = NULL;   q->rear->next = new;   q->rear = new;   return OK; } Status QueueDelete(Queue* q,QueueElemtype* value,QueueOperatorValue *operator,int* symbol){   QueueNodePtr first;   if( q->front == q->rear )     return ERROR;   first = q->front->next;   if( first->flag == 1 ){     *value = first->data;     *symbol = 1;   }   else{     *operator = first->operator;     *symbol = 0;   }   q->front->next = first->next;   if( first == q->rear ){     q->rear = q->front;   }   return OK; }  /* 利用棧將中綴表達式轉化為后綴表達式:  * ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――  * | 用戶的輸入  |      進行的處理      |  * |  0~9:   | 直接輸出到控制臺        |  * |  /,*,(  | 直接Push          |  * |  +,-    | 將棧中的元素Pop直到1.??栈蛘呤?.遇到(   |  * |  )     | 在遇到(之前將棧中的元素全部Pop   |  * ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――  * */  Status Infix2Postfix(Queue* q){   //Queue q;   //QueueInit(&q);   Stack s;   StackInit(&s);   char c,e;   char bufferDigit[10];   int i = 0;   double longDigit;   printf("    Please Enter Infix Expression/n");   printf("------------NOTE: end of '#'--------------/n");   scanf("%c", &c);   while( '#' != c){     while( c <= '9' && c >= '0' || '.' == c ){       bufferDigit[i++] = c;       bufferDigit[i] = '/0';       scanf("%c", &c);       if(!((c <= '9' && c >= '0' ) || '.' == c )){         longDigit = atof(bufferDigit);         QueueInsert(q,longDigit);         i = 0;       }     }     if( '(' == c || '*' == c || '/' == c ){       Push(&s, c);     }     else if( '+' == c || '-' == c ){       if( !StackLength(s) )         Push(&s, c);       else{         Pop(&s, &e);         while( '(' != e ){           QueueInsert_operatorValue(q, e);           if( StackLength(s) == 0 ){             break;           }else             Pop(&s, &e);         }         if( '(' == e )           Push(&s, e);         Push(&s, c);       }     }else if( ')' == c ){       Pop(&s, &e);       while( '(' != e ){         QueueInsert_operatorValue(q, e);         Pop(&s, &e);       }     }else if( '#' == c){       break;     }else{       printf("input ERROR!/n");       return ERROR;     }     scanf("%c", &c);   }   while(StackLength(s)){     Pop(&s, &e);     QueueInsert_operatorValue(q, e);   }   QueueInsert_operatorValue(q,'#');   return OK; } Status ShowQueue(Queue q){   printf("The Reverse Polish Notation is:");   if(q.front == q.rear){     printf("Queue Empty");     return ERROR;   }   QueueNodePtr p = q.front->next;   while(p != q.rear){     if(p->flag)       printf("%g ", p->data);     else       printf("%c ", p->operator);     p = p->next;    }   printf("/n");   return OK; }  /* 利用棧求解后綴表達式(逆波蘭表達式)的值。  * ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――  * |  +,-,*,/,  |   將棧頂的兩個元素彈出進行計算,將結果壓入棧頂 |  * | 數字      |   將其壓入棧頂                 |  * ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――  * */ Status ValueExpression(Queue q){   Stack_2 s;   StackInit_2(&s);   double o1;   double o2;   QueueElemtype number;   QueueOperatorValue operator;   int symbol;   QueueDelete(&q,&number,&operator,&symbol);   while( symbol == 1 || ( symbol == 0 && '#' != operator)){     if(symbol == 1){       Push_2(&s, number);     }     else if(symbol == 0){       switch(operator){         case '+':           Pop_2(&s,&o1);           Pop_2(&s,&o2);           Push_2(&s,o2 + o1);           break;         case '-':           Pop_2(&s,&o1);           Pop_2(&s,&o2);           Push_2(&s,o2 - o1);           break;         case '*':           Pop_2(&s,&o1);           Pop_2(&s,&o2);           Push_2(&s,o2 * o1);           break;         case '/':           Pop_2(&s,&o1);           Pop_2(&s,&o2);           Push_2(&s,o2 / o1);           break;       }     }     QueueDelete(&q,&number,&operator,&symbol);   }   Pop_2(&s,&o1);   printf("The Value of the Expression is %g/n",o1);   return OK; }  int main(){   Queue q;   QueueInit(&q);   Infix2Postfix(&q);   ShowQueue(q); /*   QueueElemtype number;   QueueOperatorValue operator;   int symbol;   QueueDelete(&q,&number,&operator,&symbol);   printf("%f,%c,%d/n",number,operator,symbol); */   ValueExpression(q); //Stack /*   Stack s;   StackInit(&s);   StackElemtype c;   Push(&s,'1');   Push(&s,'2');   Push(&s,'3');   Push(&s,'4');   Pop(&s,&c);   printf("%c ", c);   Pop(&s,&c);   printf("%c ", c);   Pop(&s,&c);   printf("%c ", c);   Pop(&s,&c);   printf("%c ", c); */   //Queue /*   Queue q;   QueueElemtype c;   QueueInit(&q);   QueueInsert(&q,1);   QueueInsert(&q,2);   QueueInsert(&q,3);   QueueInsert(&q,4);   QueueDelete(&q,&c);   printf("%d ", c);   QueueDelete(&q,&c);   printf("%d ", c);   QueueDelete(&q,&c);   printf("%d ", c);   QueueDelete(&q,&c);   printf("%d ", c);   if(QueueDelete(&q,&c)){     printf("%d ",c);   } */ /*   Queue q;   QueueInit(&q);   QueueInsert(&q,2.1);   QueueInsert_operatorValue(&q,'+');   QueueInsert(&q,43.1);   QueueInsert_operatorValue(&q,'a');   QueueInsert_operatorValue(&q,'(');   int iswho;   double d;   char c;   QueueDelete(&q,&d,&c,&iswho);   if(iswho == 1)     printf("%f ",d);   else     printf("%c ", c);   QueueDelete(&q,&d,&c,&iswho);   if(iswho == 1)     printf("%f ",d);   else     printf("%c ", c);   QueueDelete(&q,&d,&c,&iswho);   if(iswho == 1)     printf("%f ",d);   else     printf("%c ", c);   QueueDelete(&q,&d,&c,&iswho);   if(iswho == 1)     printf("%f ",d);   else     printf("%c ", c); */   return 0; } 

以上就是C語言數據結構中棧和隊列的應用,如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩综合视频| 91精品国产电影| 国产日韩av高清| 精品久久久久久中文字幕| 日韩精品视频观看| 91高潮在线观看| 亚洲精品欧美一区二区三区| 精品电影在线观看| 精品国产一区二区三区四区在线观看| 亚洲**2019国产| 日韩av不卡在线| 欧美电影免费观看高清| 欧美中文字幕视频在线观看| 日韩av成人在线观看| 一本色道久久综合亚洲精品小说| 国产亚洲人成网站在线观看| 一区二区三区www| 欧美黑人xxxⅹ高潮交| 日韩精品一区二区三区第95| 国产精品久久久久久久久久| 亚洲欧洲国产伦综合| 亚洲人精选亚洲人成在线| 欧美野外wwwxxx| 国产小视频国产精品| 综合久久五月天| 在线观看欧美www| 亚洲一区av在线播放| 国产精品久久久久久亚洲影视| 国产精品久久久久久久久久小说| 国产成人精彩在线视频九色| 亚洲区中文字幕| 欧美在线视频一区二区| 亚洲人成毛片在线播放| 91久热免费在线视频| 欧美激情精品久久久久久久变态| 激情成人在线视频| 久久精品一区中文字幕| 欧美日韩在线观看视频小说| 亚洲最大成人网色| 色综合伊人色综合网站| 97在线免费视频| 日韩av手机在线看| 在线观看久久av| 91人人爽人人爽人人精88v| 国产裸体写真av一区二区| 狠狠色香婷婷久久亚洲精品| 亚洲午夜精品久久久久久久久久久久| 欧美中文字幕视频| 亚洲乱码一区av黑人高潮| 国产精品第8页| 国产一区二区丝袜高跟鞋图片| 欧美亚洲另类制服自拍| 日韩欧美亚洲一二三区| 久久夜色精品亚洲噜噜国产mv| 欧美日韩激情视频| 成人免费网站在线看| 亚洲精品成人久久久| 久久天天躁狠狠躁夜夜躁2014| 久久艹在线视频| 在线观看免费高清视频97| 久久久噜噜噜久久久| 欧美一级在线播放| 久久天堂电影网| 国产v综合ⅴ日韩v欧美大片| 91天堂在线视频| 欧美日韩午夜激情| 国产一区二区三区日韩欧美| 国产亚洲精品美女| 欧洲精品在线视频| 在线观看国产精品日韩av| 日韩精品中文字| 欧美精品制服第一页| www.欧美免费| 北条麻妃久久精品| 日韩免费观看在线观看| 国产精品第100页| 欧洲成人免费视频| 欧美限制级电影在线观看| 成人伊人精品色xxxx视频| 亚洲国产另类久久精品| 91色琪琪电影亚洲精品久久| 亚洲电影免费观看高清完整版在线观看| 国产一区二区三区毛片| 欧美成年人网站| 亚洲人成电影在线播放| 日本亚洲欧洲色| 欧美综合国产精品久久丁香| 夜夜狂射影院欧美极品| 欧美另类69精品久久久久9999| 亚洲乱码国产乱码精品精天堂| 久久精品99久久香蕉国产色戒| 亚洲美女性生活视频| 中文字幕少妇一区二区三区| 97碰在线观看| 欧美理论电影在线观看| 欧美精品在线播放| 97在线观看视频| 国产一区二区精品丝袜| 国产一区红桃视频| 九九视频这里只有精品| 欧美成人在线影院| 欧美激情一区二区久久久| zzjj国产精品一区二区| 97涩涩爰在线观看亚洲| 国语自产精品视频在免费| 日本亚洲欧洲色| 成人h猎奇视频网站| 欧美日韩午夜视频在线观看| 国产精品视频白浆免费视频| 日韩电影在线观看中文字幕| 亚洲精品成人网| 成人做爰www免费看视频网站| 91免费的视频在线播放| 18性欧美xxxⅹ性满足| 国产精品一久久香蕉国产线看观看| 国产精品久久久久久久久久三级| 国产日韩欧美一二三区| 久久天天躁狠狠躁夜夜av| 日本三级久久久| 91成人在线视频| 国产va免费精品高清在线| 中文字幕在线看视频国产欧美| 色偷偷偷亚洲综合网另类| 亚州国产精品久久久| 51久久精品夜色国产麻豆| 亚洲欧美国产精品| 亚洲精品电影在线| 国产一区二区av| 一区二区欧美激情| 国产精品丝袜一区二区三区| 国产日韩在线免费| 欧美重口另类videos人妖| 另类视频在线观看| 久久国产精品久久精品| 亚洲欧美日韩在线一区| 精品无人国产偷自产在线| 久久综合色88| 91亚洲精品视频| 国产精品美女久久| 国产午夜精品美女视频明星a级| 精品亚洲一区二区三区| 欧美视频在线观看 亚洲欧| 久久精品亚洲94久久精品| 91在线精品视频| 欧美一二三视频| 亚洲女人被黑人巨大进入al| 国产一区私人高清影院| 疯狂做受xxxx高潮欧美日本| 日韩av在线电影网| 亚洲国产欧美日韩精品| 福利精品视频在线| 欧美精品videos| 麻豆国产va免费精品高清在线| 国产精品视频中文字幕91| 国产精品91久久久久久| 亚洲免费一级电影| 久久精品人人做人人爽| 久久久免费精品视频| www日韩欧美| 亚洲二区中文字幕| 91免费福利视频| 成人激情视频免费在线| 操日韩av在线电影| 亚洲色图25p|