柏竹 柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档

柏竹

奋斗柏竹
首页
后端
前端
  • 应用推荐
关于
友链
  • 分类
  • 标签
  • 归档
  • Java基础

  • JavaWeb

  • 拓展技术

  • 框架技术

  • 数据库

  • 数据结构

    • 队列
    • 二叉树
    • 栈
      • 有效括号
    • 链表
  • Spring

  • SpringMVC

  • SpringBoot

  • SpringClound

  • Ruoyi-Vue-Plus

  • 后端
  • 数据结构
柏竹
2021-02-12
目录

栈

# 栈

栈(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

*/
#数据结构#Java
上次更新: 2023/03/12, 00:43:49

← 二叉树 链表→

最近更新
01
HTTPS自动续签
10-21
02
博客搭建-简化版(脚本)
10-20
03
ruoyi-vue-plus-部署篇
07-13
更多文章>
Theme by Vdoing | Copyright © 2019-2024 | 桂ICP备2022009417号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式