算法学习--栈的小应用

来源:互联网 发布:endnote mac 编辑:程序博客网 时间:2024/06/09 21:46
学习了栈的内容,今天实在有点懒得写了啊!
可能总会是这样,不过今天读了一个书,上面简单说就是如果你能看到未来努力的结果才能慢慢进行推进!

今天主要学习了栈的简单应用,不过确实是有收获,原来确实不知道栈是干嘛用的,不过通过书上的一番教导。
稍微明白了一点,一天进步一点以后希望晚上可以 进行总结一下啦!


栈可以处理回文的问题例如aba 这样的数字是回文,但是如何进行比对呢?利用栈就很方便解决啦!
将每个字母进行入栈操作(一半哦) 然后再进行出栈的操作就ok了!

看来这个很重要哦!

哈哈哈 算法嘛~ 现在突然意识到 选择一个好的数据结构才能快速的完成一定的工作呢!
加油!

主要的就是对奇数偶数的判断啦!
书上也说,这个数据结构是图灵大师,创造的!当时为了去解决一个函数的子调用的问题,感觉确实是啊! 这个解决这个问题再好不过了。
突然想起原来我的一个前辈,用栈的模型,进行多数据源的分库分表! 厉害!

package arithmetic.chapter2;/** * 栈相当于一个只能从后面插入取出的一个队列,可以用一个数组进行描述,这个数组添加的时候添加到末尾, * 取出的时候也只能从末未进行取出,这样一个栈的雏形就出来了, * 生活中很多都是栈的应用,例如手电筒放电池什么的,先放入的电池后拿出来. * * 栈可以用来处理回文的问题,什么是回文呢? * 就是 例如 ababababa 这样就算是回文的问题啦! * * 之前我还看到一个算法题,是关于这个问题的,哎呦,我这还一通算啊! 慢慢理解到 数据结构的意义是什么,一个良好的数据结构可以解决很多问题! * 深刻! * * 栈 主要包含以下几个元素! * 1.栈的主体队列(也就是一个数组) * 2.栈顶指针,当然这个指针一直指向的栈顶的元素,栈顶是默认没有的 * */public class Stack {    public static void main(String[] args){        long startTime = System.currentTimeMillis();        System.out.println("main 方法开始");        String palindrome = "abcdefedcba";//        String palindrome = "aba";        System.out.println(getPalindromeAfter(palindrome));        System.out.println("main 方法结束 耗时:" + (System.currentTimeMillis() - startTime) +" ms!");    }    public static int getMid(char[] chars){        // 偶数 这个中间数 是 数组选取的入栈出栈的零界点        // aba = 3 3/2 = 1  ab =1        if(chars.length%2 == 0){            return chars.length /2;        }else{            return chars.length /2;        }    }    /**     * 自己想的写法     * @param palindromeStr     * @return     */    public static boolean getPalindrome(String palindromeStr){        char[] chars = palindromeStr.toCharArray();        int index = getMid(chars);        char[] stack = new char[20];        int stackTop = 0;        for(int i =0;i<index;i++,stackTop++){            stack[i] = chars[i];        }        // 如果是 奇数则应该冲中位数的下一个数字开始比较        if(chars.length %2 != 0){            index++;        }        for(stackTop=stackTop-1;stackTop>=0;stackTop--){            if(stack[stackTop] != chars[index]){                System.out.println(stack[stackTop]+" : "+ chars[index]);                break;            }            System.out.println(stack[stackTop]+" : "+ chars[index]);            index++;        }        if(stackTop == -1){            return true;        }else{            return false;        }    }    /**********************************看书以后的*************************************/    /**     * 看书以后的,因为在之前如果数组是从0开始的时候会遇到很多问题,例如栈顶元素判断的时候栈的最后一个位置需要进行多一次判断,以至于需要判断     * 最后的stackTop是不是-1 这样显然是不符合逻辑的     * @param palindromeStr     * @return     */    public static boolean getPalindromeAfter(String palindromeStr){        char[] chars = palindromeStr.toCharArray();        int mid = chars.length/2;        char[] stack = new char[20];        int stackTop = 0;        for (int i = 0; i < mid; i++) {            stack[++stackTop] = chars[i]; // 经常写错 把后面的chars 变成 stack        }        if((chars.length/2) %2 != 0){            mid++;        }        for(;stackTop >0;stackTop--,mid++){            System.out.println(stack[stackTop]+" : "+ chars[mid]);            if(stack[stackTop] != chars[mid]){                break;            }        }        if(stackTop == 0){            return true;        }else{            return false;        }    }}
0 0
原创粉丝点击