[Java]栈--Stack

前言

熟悉Class Stack.

关于栈—笔者的C语言描述
java.util包有Stack集合类.
JDK17的Stack源码非常简单,能相对轻易看懂.
我们能用Stack类来充当栈,Java框架中LinkedList(双向链表)实现了双端队列(Deque),也能当作栈使用.
Stack类是基于数组实现.

public Stack<E> extends Vector<E>{
   
   
	...
}
Stack() 构造一个空的栈
E push(E e) 将e入栈,并返回e
E pop() 将栈顶元素出栈并返回
E peek() 获取栈顶元素
int size() 获取栈中有效元素个数
boolean empty() 检测栈是否为空

Stack类里面提供了6种常用方法,JDK17中Stack类里面只有这6种方法.
Stack可以调用父类Vector的方法,若只是当作栈使用,这6种方法足够了.
入栈:对应push
出栈:对应pop,同时可以获取堆顶元素.
获取堆顶元素:对应peek

栈使用实例

用栈倒序打印链表元素.

   public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        var stack = new Stack<Integer>();
        for(int x:list) {
            stack.push(x);
        }
        while(!stack.isEmpty())
        {
            System.out.println(stack.pop()+" ");
        }
    }

有效的括号

在这里插入图片描述

多看几组数据
s = "()"—true
s = "()[]{}"—true
s = "(]"—false
s = ([)]—false
为什么想到用栈这一数据结构呢?
栈的特点是后进先出.左括号与右括号的匹配是什么样的模式?
显而易见,右括号会与它最近的左括号匹配—若匹配失败则一定不是.
最近一词,显然满足后进先出的特点,与栈不谋而合.
算法设计:

  1. 遍历字符串,若遇到左括号进行入栈处理.
  2. 若遇到右括号则进行匹配,过程就是将最近的左括号出栈匹配.
  3. 匹配失败则结束循环,否则继续按照1,2过程遍历.
  4. 字符串遍历结束.检查栈是否为空.
  5. 栈不为空,说明左括号和右括号一定不等,返回false.
    另外,字符串长度必须为偶数,才有可能满足上述条件.
class Solution {
   
   
    public boolean isValid(String s) {
   
   
        if(s.length()%2==1)
            return false;
        Stack<Character> stack = new Stack<>();
        for(int i = 0;i<s.length();i++)
        {
   
   
            char c = s.charAt(i);
            if(c == '('||c == 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值