package edu.mama.ls14.homework;public class Homework {/*** 第一题:写一个先进后出的集合类* 要求:实现Stack接口,并补充完成以下方法*/public static void stack() {//TODO 创建Stack的实例,指定泛型为StringStack<String> stack = new DemoStack<>();//TODO 依次向Stack中装入字符串"Java"、"Python"、"Scala"、"C"、"C++"stack.push("Java");stack.push("Python");stack.push("Scala");stack.push("C");stack.push("C++");//TODO 打印栈中元素的数量System.out.println(stack.size());//TODO 查看栈顶元素并打印System.out.println(stack.peek());//TODO 取出栈顶元素并打印System.out.println(stack.pop());//TODO 再次取出栈顶元素并打印System.out.println(stack.pop());//TODO 判断栈是否为空System.out.println(stack.isEmpty());//TODO 将栈中的元素拼接成用逗号分隔的字符串并打印输出System.out.println(stack.toString());}/*** 第二题:str是一个含有英文括号的字符串,验证其括号是否正确配对* 提示:只会出现英文括号"{"、"}"、"["、"]"、"("、")"* @param str* @return 匹配正确,则返回true,反之返回false*/public static boolean verify(String str) {//TODO 这里写下你的代码Stack<Character> stack = new DemoStack<>();char[] arr = str.toCharArray();for (char c : arr) {if (c == '(' || c == '[' || c == '{') {stack.push(c);continue;}if (c == ')' || c == ']' || c == '}') {char t = stack.pop();boolean b1 = t == '(' && c != ')';boolean b2 = t == '[' && c != ']';boolean b3 = t == '{' && c != '}';if ( b1 || b2 || b3) {return false;}}}return stack.isEmpty();}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}]}"));}}
DemoStack.java
package edu.mama.ls14.homework;import java.lang.reflect.Array;import java.util.ArrayList;import java.util.List;public class DemoStack<E> implements Stack<E> {private final List<E> data = new ArrayList<>();/*** 将元素压入到栈顶* @param e*/public void push(E e) {data.add(e);}/*** 取出栈顶元素* @return 栈顶元素*/public E pop() {E e = peek();data.remove(data.size() - 1);return e;}/*** 查看栈顶元素,但不从栈中移除它* @return 栈顶元素*/public E peek() {return data.get(data.size() - 1);}/*** 判断集合是否为空* @return*/public boolean isEmpty() {return data.isEmpty();}/*** 获取集合中元素的数量* @return 元素的数量*/public int size() {return data.size();}/*** 将栈转换成数组* @return*/public E[] toArray() {if (isEmpty()) {return null;}E[] arr = (E[]) Array.newInstance(data.get(0).getClass(), data.size());arr = data.toArray(arr);return arr;}@Overridepublic String toString() {StringBuilder builder = new StringBuilder();for (int i = data.size() -1; i >= 0 ; i--) {builder.append(data.get(i)).append(",");}builder.deleteCharAt(builder.length() - 1);return builder.toString();}}

