Java 栈 如何实现括号匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 栈 如何实现括号匹配相关的知识,希望对你有一定的参考价值。
java栈实现括号匹配,主要是使用栈队列算法,如下代码:
import java.util.Scanner;import java.util.Stack;
/**
* @author Owner
*
*/
public class Main
public static void main(String[] args)
Scanner sc = new Scanner(System.in);
int n= sc.nextInt();//3条测试数据数据
Stack<Character> stack = null;
while(n!=0)
//从控制台读入一个测试字符串[]() [(])
String str = sc.next();
//如果该输入字符串为奇数,说明不匹配
if(str.length() % 2 == 1)
System.out.println("No");
else
//说明字符是偶数
stack = new Stack<Character>();
//遍历第一条测试字符串[]() [(])
for(int i=0;i<str.length();i++)
if(stack.isEmpty())
//如果栈是空的
stack.push(str.charAt(i));
else if(stack.peek() == \'[\' && str.charAt(i) == \']\' || stack.peek() == \'(\' && str.charAt(i) == \')\')
//说明此时栈中字符不是空的,并且符合,
stack.pop();
else
stack.push(str.charAt(i));
if(stack.isEmpty())
//如果栈是空的,说明括号匹配
System.out.println("Yes");
else
//说明栈不为空,括号不匹配
System.out.println("No");
n--;
参考技术A package ds.linerlist;
import java.util.Stack;
/**
* 使用栈实现字符串的括号匹配检查。
* @author <a href="mailto:bao.yiming@live.cn" mce_href="mailto:bao.yiming@live.cn">Bao Yiming</a>
*/
public class BracketMatch
/**
* 进行匹配的算法。
* @param str 待检查的字符串。
* @return
*/
public static boolean match(String str)
Stack stack = new Stack(); // 定义一个存放括号的栈。
char[] ca = str.toCharArray(); // 将字符串转为字符数组以便对其遍历。
stack.push((Character) ca[0]); // 首先将第一个字符压入栈中。
/*
* 从第二个字符开始,依次与栈中字符匹配。
* 成功则将栈顶元素弹出。
* 失败则将字符数组中的当前字符压入栈中。
*/
for (int index = 1; index < ca.length; ++index)
Character c1 = (Character) stack.peek();
Character c2 = ca[index];
if ((c1.equals('(') && c2.equals(')'))
|| (c1.equals('[') && c2.equals(']')))
stack.pop();
else
stack.push(c2);
return stack.empty();
本回答被提问者和网友采纳
括号匹配问题(顺序栈实现)
本周老师作业留了两个。先上传一个吧。那个有时间我再传上来~
本周的要求:
1.给出顺序栈的存储结构定义。
2.完成顺序栈的基本操作函数。
1) 初始化顺序栈
2) 实现入栈和出栈操作
3) 实现取栈顶元素和判空操作
括号匹配问题
3.编写主函数实现基本操作函数功能,并设置测试数据,测试合法和非法数据的输出结果。
4.程序调试运行并保存输出结果。
5.整理并提交实验作业。
1 #include <cstdio> 2 #include <cstring> 3 #define Stack_Size 50 4 5 typedef struct 6 { 7 char a[Stack_Size]; 8 int top; 9 }SeqStack; 10 11 int IsEmpty(SeqStack *S)//栈判空 12 { 13 return S->top == -1; 14 } 15 16 int Match(char ch1,char ch2)//字符串匹配 17 { 18 switch(ch2){ 19 case ‘)‘: 20 if(ch1==‘(‘) 21 return 1; 22 break; 23 case ‘}‘: 24 if(ch1==‘{‘) 25 return 1; 26 break; 27 case ‘]‘: 28 if(ch1==‘[‘) 29 return 1; 30 break; 31 } 32 return 0; 33 } 34 35 void InitStack(SeqStack * S)//初始化顺序栈 36 { 37 S->top = -1; 38 } 39 40 void Push(SeqStack * S,char x)//进栈 41 { 42 S->top++; 43 S->a[S->top]=x; 44 } 45 46 void Pop(SeqStack * S,char *x)//出栈 47 { 48 *x=S->a[S->top]; 49 S->top--; 50 } 51 52 void GetTop(SeqStack * S,char *x) 53 { 54 *x=S->a[S->top]; 55 } 56 57 58 void BracketMatch(char *str) 59 { 60 SeqStack S; 61 char ch; 62 InitStack(&S); 63 for(int i=0;str[i]!=‘\0‘;i++) 64 { 65 switch(str[i]){ 66 case ‘(‘: 67 case‘[‘: 68 case‘{‘: 69 Push(&S,str[i]); 70 break; 71 case ‘)‘: 72 case‘]‘: 73 case‘}‘: 74 if(IsEmpty(&S)){ 75 printf("\n右括号多余!\n"); 76 return ; 77 } 78 else{ 79 GetTop(&S,&ch); 80 if(Match(ch,str[i])) 81 Pop(&S,&ch); 82 else{ 83 printf("\n 对应的左右括号不同类!\n"); 84 return ; 85 } 86 } 87 88 } 89 } 90 if(IsEmpty(&S)) 91 printf("\n括号匹配!\n"); 92 else 93 printf("\n左括号多余!\n"); 94 } 95 96 97 int main() 98 { 99 char strr[50]; 100 printf("请输入各种括号\n"); 101 gets(strr); 102 BracketMatch(strr); 103 104 return 0; 105 }
以上是关于Java 栈 如何实现括号匹配的主要内容,如果未能解决你的问题,请参考以下文章
Java堆栈的应用1----------堆栈的自定义实现以及括号匹配算法的Java实现