數據結構棧的應用

1.棧的應用

后入先出的有序列表

	//無法進行小數、負數計算,除法計算為在除法步驟時舍棄小數部分public static void main(String[] args) {//雙棧實現計算器功能,思路//1.定義數棧1、符號棧2、掃描指針index,從前往后掃描表達式序列//2.遇到數字,保存到list中,直到掃描到符號,將數字還原成多位數,壓入棧1//3遇到符號,分以下情況//3.1如果為左括號,直接入棧//3.2如果為右括號,依次彈出棧2的一個符號和// 棧1的兩個數字計算,將結果壓入棧1,直到彈出左括號//3.3如果為運算符且棧2為空,壓入棧2,//3.4如果運算符優先級小于或等于棧2棧頂符號,彈出棧2棧頂符號和棧1兩個數字計算//3.5如果運算符優先級大于棧2棧頂符號,壓入棧2//4.掃描結束,依次彈出棧2的一個符號和// 棧1的兩個數字計算,將結果壓入棧1,最終棧1數字為運算結果
//        String string = "5+2*3-4";
//        String string = "10+20*3-40/2";
//        String string = "100+200/50*3";String string ="10*(2+3)-40/2";ArrayDeque<Integer> numStack = new ArrayDeque<>();//數棧ArrayDeque<Character> strStack = new ArrayDeque<>();//符號棧int index=0;//掃描指針while (index<string.length()){char c=string.charAt(index);if(Character.isDigit(c)){//步驟2int num=0;//存儲多位數數值//計算多位數while (index<string.length()&&Character.isDigit(string.charAt(index))){num=num*10+(string.charAt(index)-'0');index++;}numStack.push(num);//將數字壓入數棧continue;}if(c=='+'||c=='-'||c=='*'||c=='/'){//3.2和3.5if(strStack.isEmpty() || hasPrecedence(c,strStack.peek())){strStack.push(c);}else {//3.4calculateTop(numStack,strStack);strStack.push(c);}}else if(c=='('){//3.1strStack.push(c);}else if(c==')'){//3.2while (strStack.peek()!='('){calculateTop(numStack,strStack);}strStack.pop();}index++;}while (!strStack.isEmpty()){//步驟4calculateTop(numStack,strStack);}System.out.println("最終結果為:"+numStack.poll());}//判斷優先級,true為a比b的優先級高public static boolean hasPrecedence(char a,char b){if((a=='*'||a=='/')&&(b=='+'||b=='-')){return true;}if(b=='('){return true;}return false;}//計算棧頂元素public static void calculateTop(ArrayDeque<Integer> numStack,ArrayDeque<Character> strStack){int num1=numStack.pop();int num2=numStack.pop();char op=strStack.pop();int temp=0;switch (op){case '+':temp=num2+num1;break;case '-':temp=num2-num1;break;case '*':temp=num2*num1;break;case '/':temp=num2/num1;break;}numStack.push(temp);}

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

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

相關文章

npm 打包上傳命令,撤銷錯誤版本

添加npm用戶賬號npm adduser上傳包命令npm publish撤銷錯誤版本example&#xff1a;npm unpublish longze-guide0.1.0 --forcepackage.json example{"name": "longze-guide","version": "0.1.1","private": false,"des…

Python爬蟲實戰:研究Pyplot模塊,構建IMDb數據采集和分析系統

1. 引言 1.1 研究背景 在大數據時代,互聯網蘊含著海量有價值的信息,如何高效獲取并分析這些信息成為各行各業的重要需求。網絡爬蟲作為一種自動化數據采集工具,能夠按照預定規則從網頁中提取所需信息,為數據分析提供基礎數據支撐。而數據可視化則是將抽象數據轉化為直觀圖…

算術邏輯運算指令 (匯編)

乘除運算指令MUL指令實現兩個無符號操作數的乘法運算。乘數是OPRD&#xff0c;被乘數位于AL、AX或EAX中&#xff08;由OPRD的尺寸決定&#xff0c;乘數和被乘數的尺寸一致&#xff09;。乘積尺寸翻倍&#xff1a;16位乘積送到AX&#xff1b;32位乘積送DX:AX&#xff1b;64位乘積…

Agentless:革命性的無代理軟件工程方案

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 01. 什么是Agentless&#xff1f; Agentless是由伊利諾伊大學香檳分校…

CVE Push Service | 高危漏洞實時情報自動化推送工具

工具介紹 &#x1f525; CVE Push Service | 自動化高危漏洞情報推送 ? 面向網絡安全從業者的 高危漏洞實時情報推送工具 自動拉取 NVD 最新漏洞數據&#xff0c;篩選 CVSS ≥ 7.0 的高危漏洞&#xff0c;并通過 Server醬3 第一時間推送到您的設備&#xff0c;幫助您在應急響…

SpringBoot的基礎介紹,用法和配置

為什么會推出一款全新的SpringBoot&#xff1f;雖然Spring已經取得了非常大的成功&#xff0c;他的優點非常的多&#xff0c;將創建方法的權利給了Spring架構使我們程序員寫代碼更加的便利。但是Spring也有很多的缺點&#xff1a;配置麻煩&#xff0c;而且很多都是模板化的配置…

深度學習】--卷積神經網絡

?????? 卷積神經網絡 卷積神經網絡&#xff08;Convolutional Neural Network&#xff0c;簡稱CNN&#xff09;是一種深度學習模型&#xff0c;特別適用于處理具有網格結構的數據。主要目的是自動地、層次化地從原始數據中學習有效的特征表示&#xff0c;以完成特定的任…

RK3588部署YOLOv8姿態估計

1. YOLOv8姿態估計與部署 姿態估計(Pose estimation)是一項涉及識別圖像中關鍵點位置的任務。 關鍵點可以表示對象的各個部分&#xff0c;如關節、地標或其他獨特特征,關鍵點的位置通常表示為一組2D[x, y]或3D[x, y, visible]坐標。 YOLOv8-Pose人體姿態估計,會先檢測出圖像中…

信創之-麒麟v10服務器安裝tengine(已完成)

之前的文章太長了&#xff0c;所以單獨寫背景&#xff1a;java8springbootnginxredissqlserverwindows server2000目前java8已經更換&#xff0c;windows也已經更換&#xff0c;sqlserver也已經更換成dm8其實java的靜態文件目錄&#xff0c;可以很好處理前端網站了&#xff0c;…

Redis進階(上)

Redis系統架構中各個處理模塊是干什么的&#xff1f; Redis 系統架構 本課時&#xff0c;我將進一步分析 Redis 的系統架構&#xff0c;重點講解 Redis 系統架構的事件處理機制、數據管理、功能擴展、系統擴展等內容。 事件處理機制 Redis 組件的系統架構如圖所示&#xff0c;主…

【K8s】整體認識K8s之監控與升級/ETCD的備份和恢復/kustomization/CRD

metrics-server 先說一下metrics-server&#xff0c;這是一個聚合器&#xff0c;專門用來顯示集群的資源使用情況&#xff0c;主要是內存和cpu。 安裝 metrics-server kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.0/comp…

【數據分享】多份土地利用矢量shp數據分享-澳門

而今天要說明數據就是多份土地利用矢量shp數據分享-澳門。數據介紹▲ 土地利用數據&#xff08;2025年&#xff09;▲土地利用數據&#xff08;2018年&#xff09;▲ 30m土地利用數據&#xff08;2023年&#xff09;▲ 公路鐵路道路河流水系數據概況其他概況注&#xff1a;本文…

增強現實—Gated-attention architectures for task-oriented language grounding

&#x1f31f;&#x1f31f; 歡迎來到我的技術小筑&#xff0c;一個專為技術探索者打造的交流空間。在這里&#xff0c;我們不僅分享代碼的智慧&#xff0c;還探討技術的深度與廣度。無論您是資深開發者還是技術新手&#xff0c;這里都有一片屬于您的天空。讓我們在知識的海洋中…

CC攻擊的技術分析與防御策略

CC攻擊&#xff08;Challenge Collapsar Attack&#xff09;是一種針對Web應用的拒絕服務攻擊方式&#xff0c;其主要通過模擬正常用戶行為來消耗服務器資源。為了更好地理解這種攻擊&#xff0c;讓我們詳細分析其技術原理及防御策略。CC攻擊的技術原理CC攻擊主要是通過發送大量…

【圖論】分層圖

一、分層圖的核心思想 分層圖是一種將圖的不同狀態拆分為多個“層”的建模方法&#xff0c;每層對應一種特定狀態。通過這種方式&#xff0c;可以將復雜的狀態轉移問題轉化為多層圖中的最短路徑問題。 核心特點&#xff1a; 層內邊&#xff1a;表示普通操作&#xff08;如正常行…

當穩定幣開始生息:USDT0 與 Berachain 的二次進化故事

如果說過去幾年&#xff0c;穩定幣是 DeFi 世界里最安穩的一塊基石&#xff0c;那么 2025 年的 Berachain 正在把它們重新塑造成一種新的資產類型。在這條新興的公鏈上&#xff0c;穩定幣不再只是 “資金的搬運工”&#xff0c;而是搖身一變&#xff0c;成為能生息、能博弈、能…

Kafka、RabbitMQ 與 RocketMQ 在高并發場景下的高可用與性能對比分析

Kafka、RabbitMQ 與 RocketMQ 在高并發場景下的高可用與性能對比分析 消息隊列作為分布式系統中常見的異步解耦組件&#xff0c;在高并發場景下對可用性和性能提出了極高的要求。本文基于生產環境需求&#xff0c;深入分析 Kafka、RabbitMQ 與 RocketMQ 三大主流消息中間件在高…

深入理解 HTTP 與 HTTPS:區別以及 HTTPS 加密原理

目錄 一、HTTP 與 HTTPS 的基本概念 二、HTTP 與 HTTPS 的核心區別 三、為什么需要 HTTPS&#xff1f; 四、HTTPS 的加密通信原理&#xff08;核心&#xff09; 1. 客戶端發起 HTTPS 請求 2. 服務端返回 SSL/TLS 證書 3. 客戶端驗證證書 4. 客戶端生成對稱密鑰并用公鑰…

零售行業的 AI 革命:從用戶畫像到智能供應鏈,如何讓 “精準營銷” 不再是口號?

AI 浪潮下的零售變革?在科技飛速發展的今天&#xff0c;人工智能&#xff08;AI&#xff09;正以前所未有的態勢席卷全球&#xff0c;深刻地改變著各行各業的運營模式和發展軌跡&#xff0c;零售行業自然也難以置身事外。AI 技術憑借其強大的數據處理能力、精準的分析預測能力…

PyTorch 面試題及詳細答案120題(96-105)-- 性能優化與調試

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面試題-專欄總目錄 文章目錄 一、本文面試題目錄 96. 如何查看PyTorch模型的…