標籤:結合 對象 運算式 序列 out ade import tin com
資料結構中的棧,在解決很多問題都有用處,比如括弧匹配,迷宮求解,運算式求值等等
java中有封裝好的類,可以直接調用:
Stack:
1-->public Stack()建立一個空堆棧
2-->public boolean empty()測試堆棧是否為空白;
3-->public E pop()移除堆棧頂部的對象,並作為此函數的值返回該對象。
4-->public E push(E item)把項壓入堆棧頂部
5-->public E peek()查看堆棧頂部的對象,但不從堆棧中移除它。
6-->public boolean empty()測試堆棧是否為空白
結合一道題目:
括弧配對問題
描述現在,有一行括弧序列,請你檢查這行括弧是否配對。輸入第一行輸入一個數N(0<N<=100),表示有N組測試資料。後面的N行輸入多組輸入資料,每組輸入資料都是一個字串S(S的長度小於10000,且S不是空串),測試資料群組數少於5組。資料保證S中只含有"[","]","(",")"四種字元輸出每組輸入資料的輸出佔一行,如果該字串中所含的括弧是配對的,則輸出Yes,如果不配對則輸出No範例輸入
3[(])(])([[]()])
範例輸出
NoNoYes
代碼:
Java代碼
package com.baorant;import java.util.Scanner;import java.util.Stack;public class JavaDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); String s; for (int i = 0; i < N; i++) { s = scanner.next(); if (Main.isMatch(s)) { System.out.println("Yes"); } else { System.out.println("No"); } } }}class Main { public static boolean isMatch(String s) { Stack<Character> sk = new Stack<Character>(); for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == ‘(‘) { sk.push(‘(‘); } if (s.charAt(i) == ‘)‘) { if (!sk.isEmpty() && sk.pop() == ‘(‘) continue; else return false; } if (s.charAt(i) == ‘[‘) { sk.push(‘[‘); } if (s.charAt(i) == ‘]‘) { if (!sk.isEmpty() && sk.pop() == ‘[‘) continue; else return false; } } if (sk.isEmpty()) return true; else return false; }}
棧的應用java語言實現