Stack接口实现类StackImpl
package edu.mama.ls14.homework;import java.lang.reflect.Array;import java.util.ArrayList;import java.util.List;public class StackImpl implements Stack { List list = new ArrayList<>(); @Override public void push(Q q) { list.add(q); } @Override public Q pop() { list.remove(list.size() - 1); return null; } @Override public Q peek() { return list.get(list.size() - 1); } @Override public boolean isEmpty() { return list.isEmpty(); } @Override public int size() { return list.size(); } @Override public Q[] toArray() { if (list == null || list.size() == 0) return null; @SuppressWarnings("unchecked") Q[] array = ((Q[]) Array.newInstance(list.get(0).getClass(), 0)); return list.toArray(array); }}
Homework类
package edu.mama.ls14.homework;import java.util.HashMap;import java.util.Map;import java.util.Stack;public class Homework {/*** 第一题:写一个先进后出的集合类* 要求:实现Stack接口,并补充完成以下方法*/public static void stack() { //TODO 创建Stack的实例,指定泛型为String StackImpl si = new StackImpl(); //TODO 依次向Stack中装入字符串"Java"、"Python"、"Scala"、"C"、"C++" si.push("Java"); si.push("Python"); si.push("Scala"); si.push("C"); si.push("C++"); //TODO 打印栈中元素的数量 System.out.println(si.size()); //TODO 查看栈顶元素并打印 System.out.println(si.peek()); //TODO 取出栈顶元素并打印 System.out.println("元素" + si.peek() + "出栈"); si.pop(); //TODO 再次取出栈顶元素并打印 System.out.println("元素" + si.peek() + "出栈"); si.pop(); //TODO 判断栈是否为空 System.out.println(si.isEmpty()); //TODO 将栈中的元素拼接成用逗号分隔的字符串并打印输出 String s = ""; for (int i = 0; i < si.toArray().length; i++) { if (i == si.toArray().length - 1) { s += si.toArray()[i]; } else { s += si.toArray()[i] + ", "; } } System.out.println("\"" + s + "\"");}/** * 第二题:str是一个含有英文括号的字符串,验证其括号是否正确配对 * 提示:只会出现英文括号"{"、"}"、"["、"]"、"("、")" * @param str * @return 匹配正确,则返回true,反之返回false */public static boolean verify(String str) { //TODO 这里写下你的代码 Map<Character, Character> map = new HashMap<>(); map.put(')', '('); map.put(']', '['); map.put('}', '{'); Stack stack = new Stack(); for (int i = 0; i < str.length(); i++) { Character temp = str.charAt(i); //判断是否为左括号 if (map.containsValue(temp)) { stack.push(temp); } else if (map.containsKey(temp)) { //判断是否为右括号 if (stack.isEmpty()) { return false; } //判断左右括号是否匹配 if (stack.peek() == map.get(temp)) { stack.pop(); } else { return false; } } } return stack.isEmpty() ? true : false;}public static void main(String[] args) { stack(); System.out.println("-----------------------------"); System.out.println(verify("{()[]}")); System.out.println(verify("这里{有(很多]干扰)的[文}字")); System.out.println(verify("{name:'张三', value:[{course:'语文', score:85}, {course:'数学', score:92}]}"));}