`
bjnick
  • 浏览: 17148 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MyStack的2个应用

    博客分类:
  • java
阅读更多

复习栈的两个应用:

单词逆序:

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 一个堆栈的模板类

    《MyStack:自定义堆栈模板类的实现与应用》 在编程中,堆栈(Stack)是一种常用的数据结构,遵循“后进先出”(Last In First Out, LIFO)的原则,常用于解决递归、函数调用、内存管理等问题。在C++中,我们可以...

    MyStack c#实现栈类

    在实际应用中,`MyStack`可以用于各种场景,如表达式求值、深度优先搜索、回溯算法等。通过自定义栈类,我们可以根据需要添加额外的特性和优化,比如限制栈的大小、提供线程安全操作等。 总的来说,理解并实现栈类...

    mystack.zip

    在实际应用中,MyStack类可能还会提供其他辅助方法,如获取栈的当前大小、清除栈(即清空所有元素)、以及重载运算符(如`用于入栈,`&gt;&gt;`用于出栈)来增强其易用性。 在使用这个MyStack类时,用户只需包含对应的...

    U10316025_HW4_11_10:重写 Mystack 类以逆序打印字符串

    在本任务中,我们面临的是一个Java编程作业,要求重写一个名为`Mystack`的类,以便能够逆序打印字符串。这个作业可能涉及到数据结构、栈操作以及字符串处理等核心概念。首先,让我们深入理解栈(Stack)数据结构及其...

    MyStack-BaseCpp.rar

    主要涉及栈的设计与栈的应用,栈的后进先出特性使其广泛应用于各种问题解决方案中,这里主要介绍以下5种问题的栈方法解决方案。 1)进制转换; 2)括号匹配; 3)多项式求解; 4)八皇后问题; 5)迷宫寻径问题。

    struts2拦截器应用小例子

    这个"struts2拦截器应用小例子"可能包含了一个简单的拦截器实现,展示了如何在实际项目中集成和使用。通过这个例子,你可以学习到如何创建、注册拦截器,以及如何在Struts2框架中构建拦截器栈,从而更灵活地管理应用...

    第十二章.开发Struts.2.Spring应用.rar

    刘长炯的MyEclipse 6 Java开发中文教程第十二章,聚焦于这两个流行的开源框架的协同工作,帮助开发者更好地理解和掌握它们的联合使用。 Struts 2是一个强大的MVC(模型-视图-控制器)框架,它继承了Struts 1的优点...

    Struts2框架实现图书管理系统

    Struts2框架是Java Web开发中的一个流行MVC(Model-View-Controller)框架,它为构建基于J2EE的Web应用程序提供了强大的支持。在"Struts2框架实现图书管理系统"这个项目中,我们将深入探讨如何利用Struts2来设计和...

    在Oracle 应用服务器实现Java CORBA的研究.doc

    文章中提到的示例应用"myStack"包含了多个类,如ServerStack、ServerStackRemote、StackException等,这些类实现了简单的栈操作,并符合CORBA 2.0规范。ServerStack类是主要的实现类,实现了生命周期方法以及栈操作...

    堆栈的模拟实现|堆栈的工作过程与应用

    - **第二个应用程序**:实现数制转换,利用堆栈的特性将十进制数转换为任意进制。基本思路是反复将十进制数除以目标进制,取余数,余数从栈顶依次出栈即为目标进制的数字。 5. **测试用例** - 第一个应用程序的...

    JavaEE struts2综合小案例

    Struts2是JavaEE开发中的一个热门框架,用于构建企业级Web应用程序。它是一个基于MVC(Model-View-Controller)设计模式的框架,旨在简化Java Web应用的开发过程,提高代码的可维护性和可扩展性。在这个"JavaEE ...

    Struts2拦截器实现权限控制demo

    Struts2是一个强大的Java web框架,它为开发者提供了一种优雅的方式来组织和构建应用程序。在Struts2中,拦截器是实现业务逻辑控制和增强功能的重要机制,它们扮演着类似于AOP(面向切面编程)的角色,允许在动作...

    struts2测试程序

    Struts2是一个强大的MVC(Model-View-Controller)框架,广泛用于构建Java Web应用程序。这个"struts2测试程序"是为了帮助初学者理解和实践Struts2的核心概念和功能。XML文件配置是Struts2中不可或缺的一部分,它...

    Struts2中Struts.xml配置文件详解

    Struts2 中的 Struts.xml 配置文件是 Struts2 框架的核心配置文件,用于定义应用程序的行为和结构。在 Struts.xml 文件中,我们可以定义 package、action、interceptor、result 等多种元素,以便于实现具体的业务...

    C++开发:栈的生成与应用

    在本程序"栈的生成与应用"中,我们主要探讨如何使用C++来实现一个自定义类型的栈,并了解栈的基本操作,如压栈、弹栈和检测栈的状态。 首先,为了创建一个栈,我们需要定义一个栈类(MyStack)。在C++中,我们可以...

    建立栈和栈的逆置 栈操作

    在上述代码中,我们创建了一个名为`myStack`的栈,并向其中压入了三个整数。`push`函数用于将元素放入栈顶。 接下来,我们将探讨如何实现栈的逆置。栈的逆置通常涉及两个栈,原始栈和辅助栈。基本思路是将原始栈的...

    栈的操作合集

    2. **递归**:递归函数的调用堆栈实际上就是一个栈。 3. **内存管理**:在高级语言中,局部变量的分配和回收常使用栈机制。 4. **编译器设计**:词法分析和语法分析过程中,栈用于存储符号和临时结果。 5. **网页...

    简单介绍Struts2中的拦截器的小示例

    当请求到达Action时,会先执行拦截器链上的第一个拦截器,然后是第二个,依此类推,直到最后一个拦截器。如果某个拦截器返回了非`null`的结果,那么Action将不会被执行,而是直接返回该结果。 4. **应用场景**:...

    C++实现栈数据结构

    在编程领域,栈是一种非常重要的数据结构,它遵循“后进先出”(Last In, First Out,简称LIFO)的原则。在这个实例中,我们将会...这是一个典型的面向对象编程示例,展示了如何在实际应用中使用C++的数据结构和对象。

    strtus2拦截器的例子

    Struts2是一个非常流行的Java Web框架,用于构建可维护、可扩展且结构良好的Web应用程序。在Struts2中,拦截器扮演着至关重要的角色,它们是实现AOP(面向切面编程)的一种方式,允许开发者在动作执行前后插入自定义...

Global site tag (gtag.js) - Google Analytics