数据结构与算法(10)——栈习题一
2017-04-25 22:09
344 查看
题目:回文字符串判断,就是一个字符串,从左到右读和从右到左读是完全一样的
例如:abcdedcba就是回文
测试代码:
题目:设计一个可以把栈中元素按照升序排列的排序算法
测试代码:
题目:给定一个栈,如何只使用栈操作(push和pop)逆置栈中的内容
测试代码:
例如: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("-----------"); } }
相关文章推荐
- 训练3 习题10
- Python编程从入门到实践:习题3-8~3-10
- 习题 5.7 求k=1,k到100的相加和,k平方到50的相加和,1/k到10的相加和。
- 习题10-20 商业中心 UVa1648
- C++Primer第五版 第八章习题答案(1~10)
- 习题3-10 盒子 UVa1587
- 习题10-21 二项式系数 UVa1649
- C++Primer第五版 第十三章习题答案(1~10)
- 习题4-10 UVa815 Flooded!
- C++Primer第五版 第十六章习题答案(1~10)
- 算法竞赛入门经典第四章习题4-10 Flooded! UVA - 815
- 习题10-39 UVA 11186 Circum Triangle圆周上的三角形
- 数据结构与算法面试题80道(10)
- Week 10:Large Scale Machine Learning课后习题解答
- 算法入门经典习题2-10
- [物理学与PDEs]第1章习题10 自由电磁场在 Lorentz 规范变换下可使标势为零
- C++Primer第五版 第三章习题答案(1~10)
- 算法竞赛入门经典 习题2-10排列数字1~9形成1:2:3的等比数列
- C++Primer第五版 第四章习题答案(1~10)
- 《算法导论》笔记(10)贪心算法 部分习题