欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

伍六七带你学算法——栈的使用

程序员文章站 2022-05-08 17:29:55
...

大家都知道栈这种数据结构,它有非常多的应用场景。但如果我们不经常接触这些应用场景的话,就可能不太熟悉栈的用法。

1.栈的创建和使用

JAVA Stack类:
栈是Vector的一个子类,它实现了一个标准的后进先出的栈,栈本身最重要的就是 push 和 pop.
堆栈只定义了默认构造函数,用来创建一个空栈。堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法
Stack()
除了由Vector定义的所有方法,自己也定义了一些方法:

序号	方法描述
1	boolean empty() 
测试堆栈是否为空。
2	Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。
3	Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。
4	Object push(Object element)
把项压入堆栈顶部。
5	int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。

用栈Stack 创建对象(类型不同)
	Stack<Integer> stack = new Stack<>();
	Stack<Character> stack = new Stack<>();

2.栈的实际应用示范

伍六七带你学算法——栈的使用
这是一道力扣题,这道题我们使用栈来进行解决,其中就用到了我们的基础用法

解题如下????
public class _09_回文数 {
    public static boolean isPalindrome(int x) {
        //如果是负数 直接返回
        if(x<0) return false;
        //如果是个位数 直接返回
        if(x<10) return true;
        //将该数字转化为字符串
        String s = Integer.toString(x);
        //新建一个栈(后进先出)
        Stack v = new Stack();
        //定义字符串长度的变量,后面会频繁用到
        int length = s.length();
        //如果字符串长度为奇数,剔除中间元素
        if(length%2!=0) s=s.substring(0, length/2)+s.substring(length/2+1);
        //将第一个元素直接入栈
        v.push(s.charAt(0));
        //开始循环遍历字符串
        for(int i = 1;i<length;i++){
            //如果遍历过半,则进行判断进行出栈操作
            if(i+1>length/2){
                //如果栈顶元素与当前元素相同,则出栈
                if(v.peek().equals(s.charAt(i))){
                    v.pop();
                }else {
                    return false;
                }
            //若遍历未过半,则继续将元素添加进栈
            }else{
                v.push(s.charAt(i));
            }
        }
        if(v.isEmpty()){
            return true;
        }else {
            return false;
        }
    }
    //test
    public static void main(String[] args) {
        System.out.println(isPalindrome(11));
    }
}

以上!