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

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

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));
    }
}

以上!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章