栈
# 栈
栈(stack),又称堆栈,是限定仅在表尾进行插入和删除操作的线性表,操作方式 后进先出
栈顶: 删除、插入端 栈底: 非删除、插入端 入栈: 插入 出栈: 删除 空栈: 无元素
栈的基本操作
初始化栈、出栈、入栈、判断空栈、获取栈顶··
例子:
import java.util.*;
import java.util.List;
class MyStacks<E>{
private List<E> data = null;
/**初始化*/
public MyStacks(){
data = new ArrayList<E>();
}
/**入栈*/
public void Add(E newdata){
data.add(newdata);
}
/**出栈*/
public boolean Retreat(){
if(data.isEmpty()){
return false;
}
data.remove(data.size()-1);
return true;
}
/**判断是否空*/
public boolean isEmpty(){
return data.isEmpty();
}
//获取头数据
public E Gettop(){
return data.get(data.size()-1);
}
}
public class Demo {
public static void main(String[] args) {
MyStacks<Integer> ms = new MyStacks<>();
//判断是否空
System.out.println("是否为空:"+ms.isEmpty());
//添加
System.out.println("\n添加数据····\n");
for (int i = 1; i <= 5; i++) {
// ms.Add("Student No."+i);
ms.Add(i);
}
//获取头
System.out.println("获取头:"+ms.Gettop());
//删除
System.out.println("\n删除 *2\n");
ms.Retreat();
ms.Retreat();
//获取头
System.out.println("获取头:"+ms.Gettop());
//判断是否空
System.out.println("是否为空:"+ms.isEmpty());
}
}
/**
是否为空:true
添加数据····
获取头:5
删除 *2
获取头:3
是否为空:false
*/
# 有效括号
LeetCode习题
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
import java.util.HashMap;
import java.util.Stack;
public class Solution {
public boolean isValid(String s){
HashMap<Character,Character> map = new HashMap<>();
//堆栈类
Stack<Character> S = new Stack<>();
// <K , V>
map.put(')','(');
map.put(']','[');
map.put('}','{');
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
//判断是否存在 ( [ {
if ( map.containsValue(c) ){
//获取( [ { 入栈
S.add(c);
}else{
//空则结束
if (S.size() == 0){
return false; }
//从栈中取出并删除对象
char tmp = S.pop();
//通过K【) ] } 】找 V【 ( [ { 】 匹配 栈中的 ( [ {
if (map.get(c) != tmp){
return false; }
}
}
return S.empty();
}
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.isValid("{[]}"));
}
}
/**
true
*/
上次更新: 2023/03/12, 00:43:49