java分隔符算法_《Java数据结构和算法》栈 分隔符分配

分隔符包括“{“、"["、”(”、“] “、“)“、“}”,每个左分隔符需要右分隔符匹配。同时,在字符串中后出现左分隔符应该比早出现的先匹配。

程序从字符串中不断读取字符,每次读取一个字符。若发现是左分隔符,压入栈中;当读到一个右分隔符,弹出栈的左分割符与其比较,如果不匹配则报错。

栈中没有左分隔符和右分隔符匹配/一直存在着没有被匹配的分隔符,报错。

//栈

package StructureBracket;

public class StackX {

private int maxSize;

private char[] stackArray;

private int top;

//构造器

public StackX(int s){

maxSize = s;

stackArray = new char[maxSize];

top = -1;

}

public void push(char j){

stackArray[++top] = j;

}

public char pop(){

return stackArray[top--];

}

public char peek(){

return stackArray[top];

}

public boolean isEmpty(){

return(top == -1);

}

}

//匹配程序

package StructureBracket;

public class BracketChecker {

private String input;

public BracketChecker(String in){

input = in;

}

public void check(){

int stackSize = input.length();

StackX theStack = new StackX(stackSize);

for(int j=0;j

char ch = input.charAt(j);

switch(ch){

case '{':

case '[':

case '(':

theStack.push(ch);

break;

case '}':

case ']':

case ')':

if(!theStack.isEmpty()){

char chx = theStack.pop();

if((ch=='}')&&(chx!='{')||(ch==']')&&(chx!='[')

||(ch==')')&&(chx!='('))

System.out.println("Error: "+ch+" at "+j);

}else

System.out.println("Error: "+ch+" at "+j);

break;

default:

break;

}//end switch

}//end for

if(!theStack.isEmpty())//若能执行到此步,说明以上只执行了push

System.out.println("Error:missing right delimiter");

}

}

//主程序

package StructureBracket;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.BufferedReader;

public class BracketsApp {

public static void main(String[] args)throws IOException{

String input;

while(true){

System.out.print("Enter string containing delimiters: ");

System.out.flush();

input = getString();

if(input.equals(""))

break;

BracketChecker theChecker = new BracketChecker(input);

theChecker.check();

}

}

private static String getString() throws IOException {

// TODO Auto-generated method stub

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

String s = br.readLine();

return s;

}

}

转换规则:

(1)遇到操作数:直接写至输出out;

(2)左括号(:push入栈;(3):右括号):pop出一项,若此项不是(则写至out,若是(则退出循环;

(3)若读到操作符(+、-、*、/等):栈为空,push推其入栈;栈非空,重复:pop一项,若为(push其入 栈,若同样为操作符,比较其优先级:>栈顶push其入栈,≤栈顶,输出栈顶操作符,<栈顶退出循环;项为(,将读到的操作符push入栈;

(4):以上步骤结束后,若栈非空,弹出写至输出out.

f57393cc8f49eddd6f4f61c339eee154.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解

这篇文章主要介绍了Java Iterator接口遍历单列集合迭代器原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下Iterator接口概述在程序开发中,经常需要遍历集合中的所有元素。针对这种需求&#x…

php商城的购物车功能,php实现购物车功能(以大苹果购物网为例)

首先是几个简单的登录页面登录用户名:密 码:登录页面写好之后,需要进入处理页面,从数据库中调出用户名和密码:session_start(); //开启session 必须要写到第一行header("Content-type:text/html;charsetutf-8&quo…

php的功能和特点,php的特点有哪些

PHP是一种服务器端、跨平台、html嵌入式的脚本语言执行速度快:PHP是一种强大的CGI脚本语言,语法混合了C、Java、Perl和PHP式的新语法,执行网页比CGI、Perl和ASP更快,这是它的第一个突出的特点。 (推荐学习:PHP视频教程…

php小程序码生成并保存,小程序中如何生成小程序码

导语:小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用&…

php写不了php,php写入内存不足怎么办

php写入内存不足的解决办法:1、修改【php.ini】;2、在程序里面添加相关语句,代码为【ini_set(memory_limit, 12M)】;3、在根目录建立【.htaccess】文件。本教程操作环境:windows7系统、PHP5.6版,DELL G3电脑…

java 终态类,javaoo,继承,抽象类,终态类,访问修饰符!

java的继承!Java的继承使用extends关键字!为什么要使用继承呢?我们先来举例说明一下!比如说!烟是类!而叶子烟,和纸烟,烟这个类包含了,叶子烟和纸烟这两个类,如…

php cdr,win10彻底禁止cdr联网

1、打开Win10电脑,然后按winPauseBreak,来到“系统”属性窗口,点击控制面板,如图所示:2、打开来到控制面板页面,鼠标单击“系统和安全”,如图:3、打开在“系统和安全”对话框中&…

微信 语音转文字 java,在微信——怎么将语音转化为文字,你需要学习了

有时候和好友在聊天,这时好友在微信上发来语音信息,可是你这个时候不方便听语音,那怎么办呢?这个是我们就可以运用微信的语音转文字的功能,那么如何使用这个功能呢?跟着小编看看吧!操作方法01小…

php开发添加表情功能,WordPress网站评论区如何实现添加表情包功能?

做网站过程中,可以给自己的网站添加评论框,供用户评论。默认情况下,Wordpress网站评论框是没有添加表情功能的,那么WordPress网站评论区如何实现添加表情包功能?今天我们介绍一下如何给自己的Wordpress网站评论框添加表…

日冕物质抛射检测matlab,日冕图像论文,关于基于实时数据的日冕物质抛射自动检测方法相关参考文献资料-免费论文范文...

导读:本论文主要论述了日冕图像论文范文相关的参考文献,对您的论文写作有参考作用。(昆明理工大学信息与自动化学院,昆明 650504)(Faculty of Information Engineering and Automation,Kunming University of Science and Technology,Kunming 650504,China)摘 要:本…

link url下载php,php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号...

php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号需求:get the offer tracking linkfollow the redirect to get google play urlGo to http://apps.evozi.com/apk-downloader/Enter google play urlDownload APK fileDecompile APK f…

oracle单行子查询返回多个行 order by,单行子查询返回多个行 Issue分析求助

with order_base as --获取订单基础情况(select ou.order_key order_key, ou.order_quantity_i, ood.dispatch_time_t, ou.part_number_s, I032ZZ01 pline_name_sfrom order_uv ou left join at_as_om_orderdispatchstatus ood on ou.order_key ood.order_54union allselect m…

php按照名称搜索,PHP从类型和名称搜索

很抱歉,标题不好,但我不知道有更好的选择.目前,我正在创建一个搜索引擎以获取产品详细信息.我有2种搜索类型,第一种是使用产品类型进行搜索,另一种是使用产品名称进行搜索.这是搜索代码:$search_exploded explode (" ", $search);$x "";$cons…

简述oracle数据库特殊状态,【OracleDB】 01 概述和基本操作

实例概念:Oracle有一个特殊的概念Oracle数据库 数据库 Oracle文件系统 Oracle实例实例处理Oracle的请求,调用文件系统然后返回结果响应给客户端单实例和多实例一个数据库可以对应多个实例操作数据库服务这是Oracle数据库的服务,一定要安装…

oracle中affirm,2.Oracle Data Guard 参数介绍

Oracle Data Guard 参数介绍Data Guard作为Oracle提供的一个高可用及灾备解决方案,理解并可以实施它对于DBA来说是非常重要套的技能上节介绍了有关Data Guard的概念,这节将介绍相关的一些参数有的参数是做为备库角色时才生效的,会单独说出来1. DB_NAME该…

Linux单独编译设备树,迅为IMX6Q开发板-非设备树内核-单独编译内核驱动

内核驱动不仅可以将驱动编译到内核中,还可以动态的编译内核驱动。本文档介绍如何以模块的方式编译内核驱动。要动态的编译内核,首先需要将内核源码编译通过,内核的编译请参考使用手册第五章。9.5.2.1 内核和编译器路径本节介绍内核路径、编译…

win8关闭uefi+linux,UEFI启动是什么?Win8关闭UEFI引导方式的方法

UEFI启动是什么?不少新电脑都给用户直接预装了Win8系统,后来使用又非常不习惯,因此想改成Win7系统,但是在换系统之前,需要在BIOS下关闭UEFI引导方式,可能很多朋友都不懂该如何关闭UEFI启动项。针对这个问题&#xff0…

android listview自动加载更多,如何实现 Android ListView『上拉加载更多』?

ListView上拉加载更多的UI需求(1)向上滑动 ListView,当最后一个条目滚入屏幕时开始加载更多条目,在列表底部增加一个 footerView:一个 infinite progressBar,一个 textView 显示 “Loading...”;(2)根据数据加载的结果…

android安全性发展,Android未来发展 安全是重点

自2008年首部Android手机问世以来,谷歌智能手机方面的发展也开始高歌勇进,经过近8年的发展,Android已经成为市场上最大的移动互联网操作系统,市场占有率位居第一,虽然其竞争对手iOS步步紧逼,但是由于Androi…

android excel布局,Android实现仿excel数据表格效果

在没给大家分享代码之前,先给大家展示下效果图:1.activity/*** 采购需求* Created by Administrator on 2016/10/13.*/public class PurchaseRequireActivity extends BaseActivity implements PurchaseRequireView {Bind(R.id.appTitle)TextView appTit…