天天看點

java 棧類的用法

資料結構中的棧,在解決很多問題都有用處,比如括号比對,迷宮求解,表達式求值等等

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
[(])
(])
([[]()])      
樣例輸出
No
No
Yes      

代碼:

import java.util.Scanner;
import java.util.Stack;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int N = scan.nextInt();
		String s;
		for (int i = 0; i < N; i++) {
			s = scan.next();
			if (isMatch(s)) {
				System.out.println("Yes");
			} else {
				System.out.println("No");
			}
		}
	}
	private 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;
	}
}