Java数据结构-栈的实现
Java数据结构(一)
数据结构学习笔记。
栈的介绍
在许多算法设计中都需要一种"先进后出(First Input Last Output)"的数据结构,因而一种被称为"栈"的数据结构被抽象了出来。
栈的结构类似一个罐头:只有一个开口;先被放进去的东西沉在底下,后放进去的东西被放在顶部;想拿东西必须按照从上到下的顺序进行操作。
栈的ADT接口
/**
* 栈ADT 接口定义
* */
public interface Stack<E>{
/**
* 将一个元素 加入栈顶
* @param e 需要插入的元素
* @return 是否插入成功
* */
boolean push(E e);
/**
* 返回栈顶元素,并且将其从栈中移除(弹出)
* @return 当前栈顶元素
* */
E pop();
/**
* 返回栈顶元素,不将其从栈中移除(窥视)
* @return 当前栈顶元素
* */
E peek();
/**
* @return 返回当前栈中元素的个数
*/
int size();
/**
* 判断当前栈是否为空
* @return 如果当前栈中元素个数为0,返回true;否则,返回false
*/
boolean isEmpty();
/**
* 清除栈中所有元素
* */
void clear();
/**
* 获得迭代器
* */
Iterator<E> iterator();
}
实例应用
leetcode-20 有效的括号
代码:
import java.util.Deque;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
public class Solution_0020 {
public static void main(String[] args) {
String instrs = "([)]";
Solution_0020 demo = new Solution_0020();
System.out.println(demo.isValid(instrs));
}
public boolean isValid(String s) {
if (s.length()%2==1){
return false;
}
Map<Character,Character> pairs = new HashMap<Character,Character>(){{
put('}','{');
put(']','[');
put(')','(');
}};
Deque<Character> stack = new LinkedList<>();
for (int i = 0;i<s.length();i++){
if (stack.isEmpty()){
stack.push(s.charAt(i));
}else{
if (pairs.get(s.charAt(i))==stack.peek()){
stack.pop();
}else{
stack.push(s.charAt(i));
}
}
}
if (stack.isEmpty()){
return true;
}else{
return false;
}
}
}
笔记
栈的链表初始化:
Deque <Character> stack = new LinkedList<Character>();//stack为栈名
参考链接:https://www.cnblogs.com/xiaoxiongcanguan/p/10061255.html