码迷,mamicode.com
首页 > 其他好文 > 详细

栈Stack(自定义栈)

时间:2021-02-08 12:24:23      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:tca   div   nbsp   class   public   res   ref   判断   添加元素   

1、什么是栈

栈也是一种线性结构,

相比数组,栈对应的操作是数组的子集

只能从一端添加元素,也只能从一端取出元素

这一端称为栈顶

栈是一种后进先出的数据结构。

 

2、栈的应用

1) 编辑器无处不在的Undo操作(撤销)

2) 程序调用的系统栈

技术图片

 函数A中调用函数B,函数B中调用函数C。

如果C函数执行完了,从栈中查看是B2,接着执行B2的下面1行代码。

如果B函数执行完了,总栈中查看是A2,接着执行A2的下面1行代码。

3) 括号匹配 编译器

 

3、自定义栈

定义接口

public interface Stack<E> {
    int getSize();
    boolean isEmpty();
    void push(E e);
    E pop();
    E peek();
}

  

定义自定义栈。基于前面创建的动态数组CustomArray自定义数组(动态数组)

public class ArrayStack<E> implements Stack<E> {

    CustomArray<E> array;

    public ArrayStack(int capacity){
        array = new CustomArray<E>(capacity);
    }

    public ArrayStack(){
        array = new CustomArray<E>();
    }


    public int getSize() {
        return array.getSize();
    }

    public boolean isEmpty() {
        return array.isEmpty();
    }

    public int getCapacity(){
        return  array.getCapacity();
    }

    public void push(E e) {
        array.addLast(e);
    }

    public E pop() {
        return array.removeLast();
    }

    public E peek() {
        return array.getLast();
    }

    @Override
    public String toString() {
        StringBuilder res = new StringBuilder();
        res.append("Stack: ");
        res.append("[");
        for(int i = 0; i < array.getSize(); i++){
            res.append(array.get(i));
            if(i != array.getSize() - 1){
                res.append(", ");
            }
        }
        res.append("]");
        return  res.toString();
    }
}

 

 4、编译器 括号匹配

问题描述:给定一个只包括 ‘(‘,‘)‘,‘{‘,‘}‘,‘[‘,‘]‘ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses

解决方法: 如下代码所示

public class Solution {

    public boolean isValid(String s){
        Stack<Character> stack = new Stack<Character>() ;
        for(int i = 0; i < s.length() ; i++){
            char c = s.charAt(i);
            if(c == ‘(‘ || c == ‘[‘ || c == ‘{‘ ){
                stack.push(c);
            }else {
                if(stack.isEmpty()){
                    return  false;
                }
                char topChar = stack.pop();
                if( c == ‘)‘ && topChar != ‘(‘){
                    return  false;
                }
                if( c == ‘]‘ && topChar != ‘[‘){
                    return  false;
                }
                if( c == ‘}‘ && topChar != ‘{‘){
                    return  false;
                }
            }
        }
        return  stack.isEmpty();
    }
}

  

 

栈Stack(自定义栈)

标签:tca   div   nbsp   class   public   res   ref   判断   添加元素   

原文地址:https://www.cnblogs.com/linlf03/p/14384308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!