复习栈的两个应用:
单词逆序:
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:自定义堆栈模板类的实现与应用》 在编程中,堆栈(Stack)是一种常用的数据结构,遵循“后进先出”(Last In First Out, LIFO)的原则,常用于解决递归、函数调用、内存管理等问题。在C++中,我们可以...
在实际应用中,`MyStack`可以用于各种场景,如表达式求值、深度优先搜索、回溯算法等。通过自定义栈类,我们可以根据需要添加额外的特性和优化,比如限制栈的大小、提供线程安全操作等。 总的来说,理解并实现栈类...
在实际应用中,MyStack类可能还会提供其他辅助方法,如获取栈的当前大小、清除栈(即清空所有元素)、以及重载运算符(如`用于入栈,`>>`用于出栈)来增强其易用性。 在使用这个MyStack类时,用户只需包含对应的...
在本任务中,我们面临的是一个Java编程作业,要求重写一个名为`Mystack`的类,以便能够逆序打印字符串。这个作业可能涉及到数据结构、栈操作以及字符串处理等核心概念。首先,让我们深入理解栈(Stack)数据结构及其...
主要涉及栈的设计与栈的应用,栈的后进先出特性使其广泛应用于各种问题解决方案中,这里主要介绍以下5种问题的栈方法解决方案。 1)进制转换; 2)括号匹配; 3)多项式求解; 4)八皇后问题; 5)迷宫寻径问题。
这个"struts2拦截器应用小例子"可能包含了一个简单的拦截器实现,展示了如何在实际项目中集成和使用。通过这个例子,你可以学习到如何创建、注册拦截器,以及如何在Struts2框架中构建拦截器栈,从而更灵活地管理应用...
刘长炯的MyEclipse 6 Java开发中文教程第十二章,聚焦于这两个流行的开源框架的协同工作,帮助开发者更好地理解和掌握它们的联合使用。 Struts 2是一个强大的MVC(模型-视图-控制器)框架,它继承了Struts 1的优点...
Struts2框架是Java Web开发中的一个流行MVC(Model-View-Controller)框架,它为构建基于J2EE的Web应用程序提供了强大的支持。在"Struts2框架实现图书管理系统"这个项目中,我们将深入探讨如何利用Struts2来设计和...
文章中提到的示例应用"myStack"包含了多个类,如ServerStack、ServerStackRemote、StackException等,这些类实现了简单的栈操作,并符合CORBA 2.0规范。ServerStack类是主要的实现类,实现了生命周期方法以及栈操作...
- **第二个应用程序**:实现数制转换,利用堆栈的特性将十进制数转换为任意进制。基本思路是反复将十进制数除以目标进制,取余数,余数从栈顶依次出栈即为目标进制的数字。 5. **测试用例** - 第一个应用程序的...
Struts2是JavaEE开发中的一个热门框架,用于构建企业级Web应用程序。它是一个基于MVC(Model-View-Controller)设计模式的框架,旨在简化Java Web应用的开发过程,提高代码的可维护性和可扩展性。在这个"JavaEE ...
Struts2是一个强大的Java web框架,它为开发者提供了一种优雅的方式来组织和构建应用程序。在Struts2中,拦截器是实现业务逻辑控制和增强功能的重要机制,它们扮演着类似于AOP(面向切面编程)的角色,允许在动作...
Struts2是一个强大的MVC(Model-View-Controller)框架,广泛用于构建Java Web应用程序。这个"struts2测试程序"是为了帮助初学者理解和实践Struts2的核心概念和功能。XML文件配置是Struts2中不可或缺的一部分,它...
Struts2 中的 Struts.xml 配置文件是 Struts2 框架的核心配置文件,用于定义应用程序的行为和结构。在 Struts.xml 文件中,我们可以定义 package、action、interceptor、result 等多种元素,以便于实现具体的业务...
在本程序"栈的生成与应用"中,我们主要探讨如何使用C++来实现一个自定义类型的栈,并了解栈的基本操作,如压栈、弹栈和检测栈的状态。 首先,为了创建一个栈,我们需要定义一个栈类(MyStack)。在C++中,我们可以...
在上述代码中,我们创建了一个名为`myStack`的栈,并向其中压入了三个整数。`push`函数用于将元素放入栈顶。 接下来,我们将探讨如何实现栈的逆置。栈的逆置通常涉及两个栈,原始栈和辅助栈。基本思路是将原始栈的...
2. **递归**:递归函数的调用堆栈实际上就是一个栈。 3. **内存管理**:在高级语言中,局部变量的分配和回收常使用栈机制。 4. **编译器设计**:词法分析和语法分析过程中,栈用于存储符号和临时结果。 5. **网页...
当请求到达Action时,会先执行拦截器链上的第一个拦截器,然后是第二个,依此类推,直到最后一个拦截器。如果某个拦截器返回了非`null`的结果,那么Action将不会被执行,而是直接返回该结果。 4. **应用场景**:...
在编程领域,栈是一种非常重要的数据结构,它遵循“后进先出”(Last In, First Out,简称LIFO)的原则。在这个实例中,我们将会...这是一个典型的面向对象编程示例,展示了如何在实际应用中使用C++的数据结构和对象。
Struts2是一个非常流行的Java Web框架,用于构建可维护、可扩展且结构良好的Web应用程序。在Struts2中,拦截器扮演着至关重要的角色,它们是实现AOP(面向切面编程)的一种方式,允许开发者在动作执行前后插入自定义...