数据结构与算法(10)——栈习题一
来源:互联网 发布:qq堂 for mac 编辑:程序博客网 时间:2024/06/13 03:29
题目:回文字符串判断,就是一个字符串,从左到右读和从右到左读是完全一样的
例如:abcdedcba就是回文
/** * 字符串回文判断 * @param str 需要判断的字符串 * @return true 是回文 false 不是回文 */public static boolean isPalindrome(String str) { LinkedListStack<Character> stack = new LinkedListStack<Character>(); // 将字符串转换成字符数组 char[] inputChar = str.toCharArray(); // 字符数组的中间序号 int mid = inputChar.length / 2; // 将字符数组的前一半字符压入栈中 for (int i = 0; i < mid; i++) { stack.push(inputChar[i]); } // 如果字符数组大小为奇数 if (inputChar.length % 2 != 0) { mid += 1; } // 对比字符数组后半部分字符和栈中字符 for (int i = mid; i < inputChar.length; i++) { System.out.println(inputChar[i] + " == " + stack.top()); if (inputChar[i] != stack.pop()) { return false; } } return true;}
测试代码:
public static void main(String[] args) { String string = "asdffdsa"; if (isPalindrome(string)) { System.out.println("是回文"); } else { System.out.println("不是回文"); }}
题目:设计一个可以把栈中元素按照升序排列的排序算法
/** * 设计一个可以把栈中元素按照升序排列的排序算法 * @param sourceStack 需要排序的原栈 * @return 排序后的栈 */public static LinkedListStack<Integer> sort(LinkedListStack<Integer> sourceStack) { LinkedListStack<Integer> resultStack = new LinkedListStack<Integer>(); while (!sourceStack.isEmpty()) { Integer temp = sourceStack.pop(); while (!resultStack.isEmpty() && resultStack.top() > temp) { sourceStack.push(resultStack.pop()); } resultStack.push(temp); } return resultStack;}
测试代码:
public static void main(String[] args) { LinkedListStack<Integer> sourceStack = new LinkedListStack<Integer>(); sourceStack.push(4); sourceStack.push(6); sourceStack.push(2); LinkedListStack<Integer> resultStack= sort(sourceStack); // 先获取栈的大小 int size = resultStack.size(); for (int i = 0; i < size; i++) { System.out.println("第" + i + "个元素:" + resultStack.pop()); }}
题目:给定一个栈,如何只使用栈操作(push和pop)逆置栈中的内容
// 使用到递归调用public class StackReversal<AnyType> { public void reverseStack(LinkedListStack<AnyType> stack) { if (stack.isEmpty()) { return; } AnyType temp = stack.pop(); reverseStack(stack); insertAtBottom(stack, temp); } public void insertAtBottom(LinkedListStack<AnyType> stack, AnyType data) { if (stack.isEmpty()) { stack.push(data); return; } AnyType temp = stack.pop(); insertAtBottom(stack, data); stack.push(temp); }}
测试代码:
public static void main(String[] args) { LinkedListStack<Integer> stack = new LinkedListStack<Integer>(); stack.push(4); stack.push(3); stack.push(2); StackReversal<Integer> sr = new StackReversal<Integer>(); sr.reverseStack(stack); // 先获取栈的大小 int size = stack.size(); System.out.println("-----------"); for (int i = 0; i < size; i++) { System.out.println("第" + i + "个元素:" + stack.pop()); System.out.println("-----------"); }}
0 0
- 数据结构与算法(10)——栈习题一
- 数据结构与算法(6)——单链表习题一
- 数据结构与算法(14)——队列习题一
- 数据结构与算法(11)——栈习题二
- 数据结构与算法(12)——栈习题三
- 数据结构与算法(29)——查找习题(一)
- 数据结构与算法(18)——二叉树习题一
- 数据结构与算法(15)——队列习题二
- 数据结构与算法(24)——堆习题
- 数据结构与算法(33)——字符串习题
- 数据结构、算法与应用--习题(1)
- 【数据结构】数据结构与算法(一)——线性结构
- 数据结构与算法(30)——查找习题(二)
- 数据结构与算法(31)——查找习题(三)
- 数据结构与算法(19)——二叉树习题二
- 数据结构与算法(20)——二叉树习题三
- 数据结构与算法(21)——二叉树习题四
- 【算法】数据结构与算法分析学习笔记——第三章习题选做Josephus问题
- input type所有功能
- JS 迭代方法
- DOM性能瓶颈与Javascript性能优化
- 洗牌发牌程序(学习相关知识并实现运行)
- 【TV Picture Quality
- 数据结构与算法(10)——栈习题一
- TensorFlow安装
- cookie和session的区别
- 排序算法Java实现——归并排序
- java设计模式之单例模式
- Android打包优化
- CGAL详细安装教程
- 深入理解 JavaScript 错误和堆栈追踪
- Andriod中自定义Dialog样式的Activity点击空白处隐藏软件盘(Dialog不消失)