1. package edu.mama.ls14.homework;
    2. public class Homework {
    3. /**
    4. * 第一题:写一个先进后出的集合类
    5. * 要求:实现Stack接口,并补充完成以下方法
    6. */
    7. public static void stack() {
    8. //TODO 创建Stack的实例,指定泛型为String
    9. Stack<String> stack = new DemoStack<>();
    10. //TODO 依次向Stack中装入字符串"Java"、"Python"、"Scala"、"C"、"C++"
    11. stack.push("Java");
    12. stack.push("Python");
    13. stack.push("Scala");
    14. stack.push("C");
    15. stack.push("C++");
    16. //TODO 打印栈中元素的数量
    17. System.out.println(stack.size());
    18. //TODO 查看栈顶元素并打印
    19. System.out.println(stack.peek());
    20. //TODO 取出栈顶元素并打印
    21. System.out.println(stack.pop());
    22. //TODO 再次取出栈顶元素并打印
    23. System.out.println(stack.pop());
    24. //TODO 判断栈是否为空
    25. System.out.println(stack.isEmpty());
    26. //TODO 将栈中的元素拼接成用逗号分隔的字符串并打印输出
    27. System.out.println(stack.toString());
    28. }
    29. /**
    30. * 第二题:str是一个含有英文括号的字符串,验证其括号是否正确配对
    31. * 提示:只会出现英文括号"{"、"}"、"["、"]"、"("、")"
    32. * @param str
    33. * @return 匹配正确,则返回true,反之返回false
    34. */
    35. public static boolean verify(String str) {
    36. //TODO 这里写下你的代码
    37. Stack<Character> stack = new DemoStack<>();
    38. char[] arr = str.toCharArray();
    39. for (char c : arr) {
    40. if (c == '(' || c == '[' || c == '{') {
    41. stack.push(c);
    42. continue;
    43. }
    44. if (c == ')' || c == ']' || c == '}') {
    45. char t = stack.pop();
    46. boolean b1 = t == '(' && c != ')';
    47. boolean b2 = t == '[' && c != ']';
    48. boolean b3 = t == '{' && c != '}';
    49. if ( b1 || b2 || b3) {
    50. return false;
    51. }
    52. }
    53. }
    54. return stack.isEmpty();
    55. }
    56. public static void main(String[] args) {
    57. stack();
    58. /*
    59. {()[]}
    60. { 压栈,栈:{
    61. ( 压栈,栈:{,(
    62. ) 出栈(进行配对,栈:{
    63. [ 压栈,栈:{,[
    64. ] 出栈[进行配对,栈:{
    65. } 出栈{进行配对,栈:空
    66. 如果是空栈,则匹配成功
    67. */
    68. System.out.println("-----------------------------");
    69. System.out.println(verify("{()[]}"));
    70. System.out.println(verify("这里{有(很多]干扰)的[文}字"));
    71. System.out.println(verify("{name:'张三', value:[{course:'语文', score:85}, {course:'数学', score:92}]}"));
    72. }
    73. }

    DemoStack.java

    1. package edu.mama.ls14.homework;
    2. import java.lang.reflect.Array;
    3. import java.util.ArrayList;
    4. import java.util.List;
    5. public class DemoStack<E> implements Stack<E> {
    6. private final List<E> data = new ArrayList<>();
    7. /**
    8. * 将元素压入到栈顶
    9. * @param e
    10. */
    11. public void push(E e) {
    12. data.add(e);
    13. }
    14. /**
    15. * 取出栈顶元素
    16. * @return 栈顶元素
    17. */
    18. public E pop() {
    19. E e = peek();
    20. data.remove(data.size() - 1);
    21. return e;
    22. }
    23. /**
    24. * 查看栈顶元素,但不从栈中移除它
    25. * @return 栈顶元素
    26. */
    27. public E peek() {
    28. return data.get(data.size() - 1);
    29. }
    30. /**
    31. * 判断集合是否为空
    32. * @return
    33. */
    34. public boolean isEmpty() {
    35. return data.isEmpty();
    36. }
    37. /**
    38. * 获取集合中元素的数量
    39. * @return 元素的数量
    40. */
    41. public int size() {
    42. return data.size();
    43. }
    44. /**
    45. * 将栈转换成数组
    46. * @return
    47. */
    48. public E[] toArray() {
    49. if (isEmpty()) {
    50. return null;
    51. }
    52. E[] arr = (E[]) Array.newInstance(data.get(0).getClass(), data.size());
    53. arr = data.toArray(arr);
    54. return arr;
    55. }
    56. @Override
    57. public String toString() {
    58. StringBuilder builder = new StringBuilder();
    59. for (int i = data.size() -1; i >= 0 ; i--) {
    60. builder.append(data.get(i)).append(",");
    61. }
    62. builder.deleteCharAt(builder.length() - 1);
    63. return builder.toString();
    64. }
    65. }

    image.png