学习了栈的内容,今天实在有点懒得写了啊!
可能总会是这样,不过今天读了一个书,上面简单说就是如果你能看到未来努力的结果才能慢慢进行推进!
今天主要学习了栈的简单应用,不过确实是有收获,原来确实不知道栈是干嘛用的,不过通过书上的一番教导。
稍微明白了一点,一天进步一点以后希望晚上可以 进行总结一下啦!
栈可以处理回文的问题例如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; } } }