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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

栈的基本应用

發(fā)布時間:2025/3/20 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 栈的基本应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?前言?
之前已經學習過了棧的相關知識點,本次主要總結一下常見的棧的應用實例

📘 博客主頁:to Keep博客主頁
🙆歡迎關注,👍點贊,📝留言評論
?首發(fā)時間:2022年1月16日
📨 博主碼云地址:博主碼云地址
📕參考書籍:java核心技術 卷1
📢編程練習:牛客網+力扣網
由于博主目前也是處于一個學習的狀態(tài),如有講的不對的地方,請一定聯系我予以改正!!!

棧的應用:

  • 1 出棧與入棧順序問題:
    • 1.1 選擇題
    • 1.2 編程題
  • 2 中綴表達式轉后綴表達式
    • 2.1 填空題:
    • 2.2 編程題
  • 3 括號匹配問題:
  • 4 最小棧的問題

1 出棧與入棧順序問題:

1.1 選擇題

一個棧的入棧順序是A,B,C,D,E,則出棧順序不可能的是?( )
A EDCBA
B DECBA
C DCEAB
D ABCDE

題目中隱含的條件就是出棧的同時也是可以進棧的

分析:
對于A選項而言就是不出棧,等A,B,C,D,E依次進棧之后依次出棧,所以是符合棧的后進先出特性的,對于B選項而言,等A,B,C,D進棧之后,在對D進行出棧,然后在將E進棧,然后再把E出棧,最后將C,B,A依次出棧,因此B選項也是正確的,對于C選項與B選項對于,很明顯A是不能先于B出棧的,所以C選項是不符合的,D選項就是在進棧的同時進行出棧的操作,所以D選項也是符合要求的。
正確答案: C

1.2 編程題

代碼題:OJ鏈接

public class Solution {public boolean IsPopOrder(int [] pushA,int [] popA) {Stack<Integer> stack = new Stack<>();//創(chuàng)建一個棧int j = 0;//遍歷第二個數組for(int i = 0;i<pushA.length;i++){//遍歷第一個數組stack.push(pushA[i]);//將第一個數組依次入棧while(j<popA.length&&!stack.empty()&&stack.peek()==popA[j]){//當J下標元素與棧頂元素比較,是否相等,此時j必須是要有意義的,并且此時棧要不為空,才進行出棧操作stack.pop();j++;}}return stack.empty();//如果符合棧的特性,那么最后一定會是一個空棧。否則就是不符合棧的特性的} }

2 中綴表達式轉后綴表達式

2.1 填空題:

將(5+4)*3-2(中綴表達式也被稱做為逆波蘭式)轉化為后綴表達式的結果為:
(1)按先加減后乘除的原則給表達式加括號

(2)在將符合移到對應的括號之后,就可以得到對應的后綴表達式
54+3*2-

2.2 編程題

逆波蘭表達式求值:OJ鏈接

class Solution {public int evalRPN(String[] tokens) {Stack<Integer> stack = new Stack<>();for(int i = 0;i<tokens.length;i++){String ch = tokens[i];if(!INT(ch)){//為整數值進棧stack.push(Integer.parseInt(ch));//將字符串轉化為整數放入棧中}else{//如果為運算符int num1 = stack.pop();int num2 = stack.pop();int num=0;switch(ch){case "+": num=num2+num1;break;case"-":num=num2-num1;break;case"*":num=num2*num1;break;case"/":num=num2/num1;break;}stack.push(num);}} return kohaostack.peek();}public boolean INT(String val){//判斷是否為符號if(val.equals("+")||val.equals("-")||val.equals("*")||val.equals("/")){return true;}return false;} }

3 括號匹配問題:

對于棧中,括號匹配問題是一個挺重要的一個筆試的考點,具體題目分析如下:
括號匹配問題詳解鏈接

4 最小棧的問題

最小棧:OJ鏈接

class MinStack {Stack<Integer> stack;Stack<Integer> minStack;public MinStack() {stack=new Stack<>();minStack=new Stack<>();}public void push(int val) {if(minStack.empty()){stack.push(val);minStack.push(val);return;}if(minStack.peek()>=val){stack.push(val);minStack.push(val);}else{stack.push(val);}}public void pop() {if(stack.peek()>minStack.peek()){stack.pop();}else{stack.pop();minStack.pop();}}public int top() {return stack.peek();}public int getMin() {return minStack.peek();} }

《新程序員》:云原生和全面數字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的栈的基本应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。