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.
總結
以上是生活随笔為你收集整理的java分隔符算法_《Java数据结构和算法》栈 分隔符分配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二级数据库access和mysql_二级
- 下一篇: 如何在代码中让按钮高亮_各种博客的代码高