Stack接口实现类StackImpl

  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 StackImpl implements Stack {
  6. List list = new ArrayList<>();
  7. @Override
  8. public void push(Q q) {
  9. list.add(q);
  10. }
  11. @Override
  12. public Q pop() {
  13. list.remove(list.size() - 1);
  14. return null;
  15. }
  16. @Override
  17. public Q peek() {
  18. return list.get(list.size() - 1);
  19. }
  20. @Override
  21. public boolean isEmpty() {
  22. return list.isEmpty();
  23. }
  24. @Override
  25. public int size() {
  26. return list.size();
  27. }
  28. @Override
  29. public Q[] toArray() {
  30. if (list == null || list.size() == 0)
  31. return null;
  32. @SuppressWarnings("unchecked")
  33. Q[] array = ((Q[]) Array.newInstance(list.get(0).getClass(), 0));
  34. return list.toArray(array);
  35. }
  36. }

Homework类

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