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}]}"));
}