日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-栈4-栈的应用-中缀转后缀

發(fā)布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-栈4-栈的应用-中缀转后缀 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
//碰到數(shù)字直接輸出 //運算符號:與棧頂符號進行優(yōu)先級比較//若棧頂符號優(yōu)先級比運算符號優(yōu)先級低:此符號進棧(括號優(yōu)先級最低)//若棧頂符號優(yōu)先級不低于運算符號優(yōu)先級:將棧頂符號一直彈出并輸出,直到不滿足條件之后進棧 //左括號:直接進棧 //右括號:將棧頂符號彈出并輸出,直到匹配左括號 //最后將所有元素彈出并輸出 #define _CRT_SECURE_NO_WARNINGS #include"LinkList.c" #include<stdio.h> #include<stdlib.h> #include<string.h>typedef struct MYCHAR {LinkNode node;char* p; }MyChar;int IsNumber(char c) {return c >= '0' && c <= '9'; }int IsLeft(char c) {return c == '('; }int IsRight(char c) {return c == ')'; }//判斷是不是運算符號 int IsOperator(char c) {return c == '+' || c == '-' || c == '*' || c == '/'; }void NumberOpeartor(char* p) {printf("%c", *p); }//創(chuàng)建Mychar MyChar* CreateMyChar(char *p) {MyChar* mychar = (MyChar *)malloc(sizeof(MyChar));mychar->p = p;return mychar; }//左括號的操作 void LeftOperator(LinkList* stack, char *p) {Push_LinkList(stack, (LinkNode*)CreateMyChar(p)); }//右括號操作 void RightOperator(LinkList* stack) {//先判斷棧中有沒有元素while (Size_LinkList(stack) > 0){MyChar* mychar = (MyChar*)Top_LinkList(stack);//如果匹配到左括號if (IsLeft(*(mychar->p))){Pop_LinkList(stack);break;}//輸出printf("%c", *(mychar->p));//彈出Pop_LinkList(stack);//釋放內(nèi)存free(mychar);} }//返回運算優(yōu)先級 int GetPriority(char c) {if (c == '*' || c == '/'){return 2;}if (c == '+' || c == '-'){return 1;}return 0; }//運算符號的操作 void OperatorOperate(LinkList* stack, char *p) {//先取出棧頂元素MyChar* mychar = (MyChar*)Top_LinkList(stack);if (mychar == NULL){Push_LinkList(stack, (LinkNode*)CreateMyChar(p));return;}//如果棧頂優(yōu)先級低于當(dāng)前字符優(yōu)先級 直接入棧if (GetPriority(*(mychar->p)) < GetPriority(*p)){Push_LinkList(stack, (LinkNode*)CreateMyChar(p));return;}//如果棧頂符號優(yōu)先級不低于當(dāng)前字符優(yōu)先級else {//while (Size_LinkList(stack) > 0)//{// MyChar* mychar2 = (MyChar*)Top_LinkList(stack);// //如果優(yōu)先級低,當(dāng)前符號入棧// if (GetPriority(*(mychar2->p)) < GetPriority(*p))// {// Push_LinkList(stack, (LinkNode*)CreateMyChar(p));// break;// }// printf("%c", *(mychar2->p));// //彈出// Pop_LinkList(stack);// //釋放// free(mychar2); //}//將第一個獲取的元素輸出并彈出printf("%c", *(mychar->p));Pop_LinkList(stack);//一直比較直到滿足條件while (Size_LinkList(stack) > 0){MyChar* mychar2 = (MyChar*)Top_LinkList(stack);//如果優(yōu)先級低,當(dāng)前符號入棧if (GetPriority(*(mychar2->p)) < GetPriority(*p)){Push_LinkList(stack, (LinkNode*)CreateMyChar(p));break;}printf("%c", *(mychar2->p));//彈出Pop_LinkList(stack);//釋放free(mychar2); }//彈出完畢后最后將符號元素壓入Push_LinkList(stack, (LinkNode*)CreateMyChar(p));}} int main() {char* str = "8+(3-1)*5+1-6";char* p = str;LinkList* stack = Init_linkList();while (*p != '\0'){//如果是數(shù)字,直接輸出if (IsNumber(*p)){NumberOpeartor(p);}//如果是左括號,進棧if (IsLeft(*p)){LeftOperator(stack, p);}//如果是右括號,從棧頂彈出元素,直到匹配到左括號if (IsRight(*p)){RightOperator(stack); }//如果是運算符號if (IsOperator(*p)){OperatorOperate(stack, p);}p++;}while (Size_LinkList(stack) > 0){MyChar* mychar = (MyChar*)Top_LinkList(stack);printf("%c", *(mychar->p));Pop_LinkList(stack);free(mychar);}system("pause");return 0; }

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的数据结构-栈4-栈的应用-中缀转后缀的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。