【數據結構與算法 | 基礎篇】棧:中綴表達式轉變為后綴表達式

1. 前言

假設我們已經知道中綴表達式和后綴表達式的概念. 我們可以用符號棧來實現中綴表達式向后綴表達式的轉變.

2. 符號棧實現中綴表達式轉變為后綴表達式

(1). 思路

我們設計了可變字符串與符號棧. 如果傳入的字符串的字符是數字字符,則直接將該字符append到stringbuilder中. 如果該字符是符號字符,首先先判斷符號棧是否為空,如果為空,則直接將該字符壓棧,如果不為空,則需要將該字符與棧頂字符進行優先級比較.如果棧頂元素的優先級>該字符,毫無疑問,直接將棧頂元素彈棧.如果棧頂元素與該元素優先級相等,由于計算的順序是從左到右,所以仍然需要將棧頂元素彈棧. 彈棧過程結束以后,需要將該字符壓棧.

(2). 解

//將中綴表達式轉變為后綴表達式
//目前只討論沒有小括號的情況
public class postfixexpr {public StringBuilder postfix(String s) throws Exception {//符號棧Deque<Character> deque = new LinkedList<>();StringBuilder str = new StringBuilder();int i = 0;for (; i < s.length(); i++) {char c = s.charAt(i);//如果該字符是數字字符, 那么將該字符加入到可變字符串if(isNumber(c)) {str.append(c);} else {//如果棧空, 則直接將該符號壓棧//如果不為空, 則將棧頂元素與該字符作比較//if棧頂元素優先級大于等于該元素, 全部彈棧if(deque.isEmpty()) {deque.push(c);} else {while(!deque.isEmpty() && priority(deque.peek()) >= priority(c)){str.append(deque.pop());}deque.push(c);}}}while(!deque.isEmpty()) {str.append(deque.pop());}return str;}//設計判斷符號優先級的函數private int priority(char c) throws Exception {if (c == '+' || c == '-') {return 1;} else if (c == '*' || c == '/') {return 2;} else {throw new Exception();}}private boolean isNumber(char c) {if (c == '+' || c == '-' || c == '*' || c == '/') {return false;}return true;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/18014.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/18014.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/18014.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python | 十、調試(pdb庫)

pdb 是 Python 的官方標準庫之一&#xff0c;提供了一個交互式源代碼調試器。它可以讓開發者在程序執行過程中暫停&#xff0c;檢查代碼狀態&#xff08;如變量的值&#xff09;&#xff0c;單步執行代碼&#xff0c;以及運行到某個特定位置等。這些功能使得開發者能夠理解代碼…

調整圖片和表格尺寸的命令:resizebox

\resizebox 是 LaTeX 中的一個命令&#xff0c;用于調整插入的內容&#xff08;如圖像、表格、文本等&#xff09;的大小。它的語法如下&#xff1a; \resizebox{<width>}{<height>}{<content>}其中&#xff1a; <width> 和 <height> 分別表示…

IDEA提示Untrusted Server‘s certificate

如果你用的是Intellij系列IDE&#xff08;GoLand, PHPStorm, WebStorm, IDEA&#xff09;&#xff0c;突然彈出個提示『Untrusted Servers certificate 』 莫慌&#xff0c;這是因為你用了破解版的 IDE&#xff0c;破解過程中有個hosts綁定的操作&#xff1a; 0.0.0.0 account.…

代數拓撲學

啊&#xff0c;哈嘍&#xff0c;小伙伴們大家好。我是#張億&#xff0c;今天吶&#xff0c;學的是代數拓撲學 代數拓撲學是拓撲學中主要依賴 [1]代數工具來解決問題的一個分支。同調與同倫的理論是代數拓撲學的兩大支柱&#xff08;見同調論&#xff0c;同倫論&#xff09;。 …

K8s集群調度續章

目錄 一、污點&#xff08;Taint&#xff09; 1、污點&#xff08;Taint&#xff09; 2、污點組成格式 3、當前taint effect支持如下三個選項&#xff1a; 4、查看node節點上的污點 5、設置污點 6、清除污點 7、示例一 查看pod狀態&#xff0c;模擬驅逐node02上的pod …

NoSQL數據庫技術與應用 教學設計

《NoSQL數據庫技術與應用》 教學設計 課程名稱&#xff1a;NoSQL數據庫技術與應用 授課年級&#xff1a; 20xx年級 授課學期&#xff1a; 20xx學年第一學期 教師姓名&#xff1a; 某某老師 2020年5月6日 課題 名稱 第1章 初識NoSQL 計劃 學時 3 課時 內容 分析 隨著云計算、…

【軟件安裝】office不讓卸載、visio安裝報錯64位等

問題描述 office安裝時報錯&#xff0c;顯示64位、32位不能共存。或者word已經安裝了&#xff0c;再裝visio的時候就顯示報錯。 解決思路 卸載已經安裝的版本重新安裝 遇到的問題 首先是卸載不了&#xff0c;在windows的setting里面&#xff0c;無法卸載&#xff1b;安裝包…

【面試】JDK和JVM是什么關系?

目錄 1. JDK2. JVM3. 關系 1. JDK 1.Java Development Kit&#xff0c;java開發工具包。2.提供了java應用程序開發所需的所有工具和API。3.JDK包含了JRE&#xff08;Java Runtime Environment&#xff09;,即Java運行環境&#xff0c;以及編譯Java源代碼的編譯器&#xff08;j…

消費增值的真面目!綠色積分的合理運用!

各位朋友&#xff0c;大家好&#xff01;我是吳軍&#xff0c;來自一家備受矚目的軟件開發企業&#xff0c;擔任產品經理一職。今天&#xff0c;我非常榮幸能有機會與大家分享一種在市場上備受矚目的新型商業模式——消費增值模式。 隨著環保和可持續發展理念日益深入人心&…

對象解構與迭代器的貓膩?

前言 變量的解構賦值是前端開發中經常用到的一個技巧&#xff0c;比如&#xff1a; // 對象解構 const obj { a: 1, b: 2 }; const { a, b } obj; console.log(a, b)數組解構 const arr [1, 2, 3]; const [a, b] arr; console.log(a, b)工作中我們最經常用的就是類似上面…

輕松拿捏C語言——自定義類型之【結構體】

&#x1f970;歡迎關注 輕松拿捏C語言系列&#xff0c;來和 小哇 一起進步&#xff01;? &#x1f389;創作不易&#xff0c;請多多支持&#x1f389; &#x1f308;感謝大家的閱讀、點贊、收藏和關注&#x1f495; &#x1f339;如有問題&#xff0c;歡迎指正 1. 結構體類型的…

echarts-象形柱圖

象形柱圖 一般的柱圖都是純色柱圖&#xff0c;使用象形柱圖可以給柱圖定義自己的樣式。 樣式的調節與柱圖一樣&#xff0c;核心在于symbol調節柱圖的組成。 let options {tooltip: {},xAxis: {type: "category",data: ["d1", "d2", "d3&qu…

具有固定寬度的盒子:\makebox, \parbox

makebox \makebox 是 LaTeX 中的一個命令&#xff0c;用于創建一個具有固定寬度的盒子&#xff0c;并在該盒子內放置內容。這個命令可以用于控制文本或對象的位置和對齊。 語法如下&#xff1a; \makebox[<width>][<alignment>]{<content>}其中&#xff1…

存儲+調優:存儲-memcached

存儲調優&#xff1a;存儲-memcached 什么是memcached? 高性能的分布式內存緩存服務器。通過緩存數據庫的查詢結果&#xff0c;減少數據庫訪問次數&#xff0c;以提高動態Web應用的速度、提高可擴展性。 在memcached中存什么&#xff1f; 盡快被保存 訪問頻率高 1.數據保…

【CSharp】int類型與IntPtr類型之間的轉換

【CSharp】int類型與IntPtr類型之間的轉換 1.背景2.int轉IntPtr接口3.IntPtr轉int接口4.相互轉化示例1.背景 .NET提供了一個結構體System.IntPtr專門用來代表句柄或指針。 IntPtr 結構,表示一個帶符號整數,其中位寬度與指針相同。 注解 類型 IntPtr 設計為一個整數,其大小…

unity回到低版本報錯解決

用高版本2022打開過后的再回到2020就報了一個錯。 報錯如下&#xff1a; Library\PackageCache\com.unity.ai.navigation1.1.5\Runtime\NavMeshSurface.cs 看了一下是Library&#xff0c;然后我刪除了整個Library文件夾&#xff0c;重啟啟動生成Library&#xff0c;然后還是…

IT人的拖延——渴望成功與害怕成功的矛盾

很多人都以為&#xff0c;害怕失敗是拖延的主要誘因&#xff0c;但其實“害怕成功”也是拖延的主要誘因之一。要說這個原因&#xff0c;我們不得不提起Bible中的一個人“約拿”&#xff0c;讓我們先來看看他的故事帶給我們什么啟示。 約拿情結簡介 約拿是Bible中的一名先知&a…

二十九、openlayers官網示例DeclutterGroup解析——避免矢量圖層的文字重疊

官網demo地址&#xff1a; Declutter Group 這篇說的是如何設置矢量圖層上多數據點文字不重疊。 主要是屬性declutter &#xff0c;用于處理矢量圖層上重疊的標注和符號&#xff0c;為true時啟用去重疊功能。所有矢量特征的標注和符號都會被處理以避免重疊。false則與之相反。…

Nuxt - middleware 路由中間件

官方文檔&#xff1a;https://nuxt.com.cn/docs/guide/directory-structure/middleware 目錄 1 中間件類別2 中間件執行順序3 內聯路由中間件4 命名路由中間件5 全局路由中間件 1 中間件類別 內聯路由中間件&#xff0c;直接在頁面內定義。命名路由中間件&#xff0c;放置在 …

es安裝錯誤Exception in thread “main“ java.nio.file.NoSuchFileException解決方案

docker 啟動es出現一下錯誤的解決方案 Exception in thread “main” java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.options Exception in thread "main" java.nio.file.NoSuchFileException: /usr/share/elasticsearch/config/jvm.op…