java学习5

74 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

1 栈的特点:

栈:后进先出,只能在栈顶操作。是先移动“指针”还是先移动数据,在出栈和进栈时要保持一致。当进栈操作时,先将数据存入,“指针”再做加一操作;当出栈时,先将数据取出,“指针”再做减一操作。在写代码过程中,我为了方便直接,在出栈时直接depth--,但是在调试时发现了问题。因为数组是从0开始的,取出的数据并不是自己想要的。

//出栈
tempPopChar = data[depth--];
    /**
     *  Push an element.
     * @param paraChar
     * @return
     */
    public boolean push (char paraChar) {
        if (depth == MAX_DEPTH) {
            System.out.println("Stack is full!");
            return false;
        }
 
        data[depth++] = paraChar;
        return true;
    }
 
 
    /**
     * Pop an element
     * @return
     */
    public char pop() {
        char tempPopChar;
        if (depth == 0) {
            System.out.println("Stack is empty");
            return '\0';
        }
 
        // error code : tempPopChar = data[depth--];
        tempPopChar = data[depth - 1];
        depth--;
        return tempPopChar;
    }

 栈的应用(括号匹配)

思路

如(),[],{}括号左右对称,我们将括号分为左右,左括号入栈,遇到右括号就出栈一个左括号与之匹配,匹配成功即匹配,失败则不匹配。不要忘记在最后要判断一下栈中括号是否出栈完。在这里使用的是switch...case来进行判断分支,但是若换成if,else if,else来实现,则代码中会出现很多的分支,显然会显得代码很冗余,所以当分支较多时,使用switch相比if会好一些。

Is the expression [2 + (1 - 3)] * 4 bracket matching? true
Is the expression ( )  ) bracket matching? false
Is the expression (()()(()) bracket matching? false
Is the expression ({}[]) bracket matching? true
Is the expression )( bracket matching? false

递归

1递归特点

我的理解:自己调用自己的方法,但是不能无限制的调用,在合适的时候一定又要一层层跳出自己方法最后跳出。在使用递归时,不能把问题考虑的太细,不然会陷入这个循环中,既然每个子问题规律一样,只需要知道他们规律,剩下交给计算机处理。

总结 1.程序实现出入栈,根据栈的特点,括号匹配例如栈来实现

2.递归的简单应用