复习栈的两个应用:
单词逆序:
package com.test.data_struct;
import java.io.*;
import java.util.*;
public class MyReverserTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
String input=null;
String output=null;
while(true){
try {
System.out.println("请输入单词,回车结束。若无输入直接回车,则程序终止退出。");
input=br.readLine();
if(input.equals("")){
System.exit(0);
}
MyReverser mr=new MyReverser();
output=mr.doReverse(input);
System.out.println("倒置后的单词是:"+output);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class MyReverser{
private String output="";
private Stack s=new Stack();
public String doReverse(String input){
for(int i=0;i<input.length();i++)
s.push(input.charAt(i));
while(!s.isEmpty()){
output=output+s.pop();
}
return output;
}
}
匹配分隔符:
package com.test.data_struct;
import java.io.*;
import java.util.*;
public class MyCheckerTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
while (true) {
System.out.println("please input a String,no input means exit:");
String input = getString();
if (input.equals("")){
System.out.println("no input ,exit.");
break;
}
MyChecker mc = new MyChecker();
mc.checkSymbol(input);
}
}
public static String getString() {
String input = "";
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
try {
input = br.readLine();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return input;
}
}
class MyChecker {
private Stack stk;
public MyChecker() {
stk = new Stack();
}
public void checkSymbol(String input) {
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
switch (c) {
case '(':
case '[':
case '{':
stk.push(c);
break;
case ')':
case ']':
case '}':
if (!stk.isEmpty()) {
char cx = stk.pop().toString().charAt(0);
System.out.println(cx);
if ((c == ')' && cx != '(') || (c == ']' && cx != '[')
|| (c == '}' && cx != '{')) {
System.out.println("not match at no." + (i + 1) + " \""
+ c + "\".");
}
} else {
System.out.println("error at no." + (i + 1) + " \"" + c
+ "\".");
}
break;
default:
break;
}
}
if (!stk.isEmpty()) {
System.out.println("missing symbol.");
}else{
System.out.println("good matched.");
}
}
}
通过这2个小应用,对栈的使用有了点小感觉了。
分享到:
相关推荐
MyStack.java
自己写的堆栈模板类,感觉很好用,不过push 和 pop直接返回对象 所以,对象一点要有拷贝构造,
c#实现栈类弹出、清空、入栈等基本功能。描述大于20字描述大于20字
使用C++模板类实现基本数据结构--栈,封装MyStack类,可以用于学习堆栈的基本操作。使用时,包含头文件,创建对象即可,方便快捷!
主要涉及栈的设计与栈的应用,栈的后进先出特性使其广泛应用于各种问题解决方案中,这里主要介绍以下5种问题的栈方法解决方案。 1)进制转换; 2)括号匹配; 3)多项式求解; 4)八皇后问题; 5)迷宫寻径问题。
U10316013_HW5_15_10 重写 MyStack 类以执行列表字段的深拷贝
U10316044_HW5_15_10 (修改 MyStack 类)重写代码清单 11.10 中的 MyStack 类以执行列表字段的深拷贝。
String s = mystack.peek().toString(); System.out.println("栈顶对象为"+s+"\t"+"当前栈区大小为"+mystack.size()); if (s.equals("name")) { name = new String(c, start, end); emp.setName(name...
U10316025_HW4_11_10 重写 Mystack 类以逆序打印字符串
U10316025_HW5_15_10 从列表字段的深层副本重写 MyStack 类
U10316011_HW5_15_10 重写listing11.10中的myStack类以执行列表字段的深拷贝
因为SUN的Stack不是严格意义上的stack,因此需要重写下,是这样的
2) 创建一个MyStack的对象stack,调用Push_back函数输入往stack中输入m(m )个数据 3) 创建一个长度为3的DataStructure*类型的数组,将其3个元素分别指向str1, str2, stack,然后编写for循环调用Size()和Output()...
栈的应用举例 1. 将10进制正整数num转换为n进制 private String conversion(int num, int n) { MyStack<Integer> myStack = new MyArrayStack(); Integer result = num; while (true) { // 将余数入栈 ...
junit测试程序,可供刚开始学习junit者使用。
String[] array = {"1","2","3"}; MyStack myStack = new MyStack(); myStack.init(array); myStack.displayStack(); myStack.push("4"); myStack.displayStack(); myStack.pop(); myStack.pop(); myStack....
要求在第一个构造方法中调用第二个构造方法。该类还有两个重载的move()方法,其中一个无参,在屏幕上输出一行文字: XXX Moving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次 XXX Moving!! 4,写...
U10316024_HW_15_10 类 MyStack 实现 Cloneable 并使用深循环
java编程试题.很多实例非常经典..很值得去研究
关于对用户的拦截验证。 <!-- 部署自定义拦截器!... <interceptor-stack name="myStack"> ...-- 应用自定义拦截器栈 --> <interceptor-ref name="myStack" /> </struts>