java栈的实现
程序员文章站
2022-07-10 20:29:47
...
以前写过一篇有关栈的源码分析,这里就不多说,https://www.jianshu.com/p/34c14f9fba15,栈实际也是操作数组进行出栈,入栈等操作,所以我直接拿上篇文章自己打造的ArrayList
Stack类接口
public interface Stack<E> {
//获得大小
int getSize();
//是否为空
boolean isEmpty();
//入栈
void push(E e);
//出栈
E pop();
//栈顶元素
E peek();
}
ArrayStack实现类
public class ArrayStack<E> implements Stack<E> {
Array<E> array;
public ArrayStack(int capacity) {
array = new Array<>(capacity);
}
public ArrayStack() {
array = new Array<>();
}
@Override
public int getSize() {
return array.getSize();
}
@Override
public boolean isEmpty() {
return array.isEmpty();
}
public int getCapacity() {
return array.getCapacity();
}
/**
* 入栈
*/
@Override
public void push(E e) {
array.addLast(e);
}
/**
* 返回栈顶元素并出栈
*/
@Override
public E pop() {
return array.removeLast();
}
/**
* 栈顶的元素
*
* @return
*/
@Override
public E peek() {
return array.getLast();
}
@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append("Statck:").append('[');
for (int i = 0; i < array.getSize(); i++) {
res.append(array.get(i));
if (i != array.getSize()) {
res.append(",");
}
}
res.append("] top");
return res.toString();
}
}
使用栈解决LeetCode中的第20的问题:有效的括号
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c=s.charAt(i);
if(c=='('||c=='['||c=='{'){
stack.push(c);
}else{
if(stack.empty()){
return false;
}
char top=stack.pop();//返回栈顶并删除栈顶元素
if(c == ')' && top != '(')
return false;
if(c == ']' && top != '[')
return false;
if(c == '}' && top != '{')
return false;
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
System.out.println((new Solution()).isValid("()[]{}"));
System.out.println((new Solution()).isValid("([)]"));
}
}
上一篇: java实现栈队列_Java实现栈和队列
下一篇: redis简单使用HyperLogLog