栈的应用-判断括号匹配

栈的一个典型应用就是可以用来协助分析表达式的括号是否匹配。括号可以延伸到任何成对出现的界定符,例如引号,书名号等。

接下来给出程序实现:

第一部分给出的是堆栈的插入,删除等操作对应的实现:

 1 public class StackChar
 2 {
 3   private int maxSize;//堆栈数组大小
 4   private char [] stackArray;
 5   private int top;//堆栈顶
 6  public StackChar(int maxSize)
 7    {
 8       this.maxSize=maxSize;//设置初始化数组大小
 9       stackArray=new char[maxSize];
10       top=-1;
11     }
12   public void push(char ch)
13   {
14     //入栈
15     if(isFull())
16     System.out.println("Cannot insert item "+ch +"! the stack is already full.");
17     else
18    {
19     top++;
20     stackArray[top]=ch;
21     }
22    }
23 public char pop(char ch)
24   {
25     //入栈
26     if(isEmpty())
27    {
28      System.out.println("Cannot delect item "+ch +"! the stack is empty.");
29      return 0;
30     }
31     else
32    {
33         char ch=stackArray[top];
34         stackArray[top]=null;
35         top--;
36         return  ch;//出栈并且返回值
37     }
38   }
39    public int size()
40   {
41    return top+1;
42    }
43    public int peek()
44   {
45    return stackArray[top];
46    }
47    public char num(int n)
48   {
49     return stackArray[n];//返回index为n的数值
50    }
51    public boolean isEmpty()
52   {
53     return (-1==top);
54   }
55  public boolean isFull()
56   {
57     return (maxSize-1==top);
58   }
59   public void print ()
60   {
61   System.out.println(" Stack :"):
62   for (int i=0;i<maxSize;i++)
63    {
64      System.out.println(num(i));
65    }
66   }
67 }

第二部分是给出了相应的括号判断:

 1 public class BrackCheck{
 2   private String inString;
 3   public  BrackCheck(String in){
 4    inString=in;
 5   }
 6   public void check(){//检查括号匹配与否
 7   {
 8    int len=inString.length();
 9    StackChar chStack=new StackChar(len);
10    char ch;
11    char chPop;
12    boolean flag= false;
13    for( int index=0; index<len;index++){
14     ch=inString.charAt(index);
15     switch(ch){
16       case ‘{‘:
17       case ‘[‘:
18       case ‘(‘:
19        chStack.push(ch);//如果检测到是括号的前半部分,就执行入栈操作
20        break;
21        case ‘}‘:
22        case ‘]‘:
23        case ‘)‘:
24        if(!chStack.isEmpty()){//检测到反括号
25           chPop=chStack.peek();
26           if((‘{‘==chPop && ‘}‘!=ch)//判断堆栈顶的括号与现在读入的这个反括号是不是匹配
27              ||(‘[‘==chPop && ‘]‘!=ch)
28              || (‘(‘==chPop && ‘)‘!=ch))
29             {//不匹配就报错
30                  System.out.println("Error : " + ch+" at" +index);
31                  flag=true;
32              }
33            else if((‘{‘==chPop && ‘}‘==ch)
34              ||(‘[‘==chPop && ‘]‘==ch)
35              || (‘(‘==chPop && ‘)‘==ch))
36               //匹配,出栈,进行下一个字符
37             chStack.pop();
38             }
39             else//遇到反括号,但是栈为空,则出错
40              {
41                  System.out.println("Error :"+ch+" at"+index);
42                  flag=true;
43               }
44            default:
45                  break;
46            }
47     }
48  if(!flag)
49      System.out.println("The delimiters of the string is matching!");
50    }
51   }
时间: 2024-10-12 11:01:11

栈的应用-判断括号匹配的相关文章

栈应用——最长括号匹配

问题描述: 给定字符串,仅包含左括号'('和右括号')',它可能不是括号匹配的,设计算法,找出最长的括号字串,并返回字串的长度. 如: ((): 2 ()(): 4 ()(()):6 (()()): 6 思路分析: 记起始位置start = -1,最大匹配长度为max 考虑当前位置i的符号: 如果是'(',直接入栈: 如果是')': 如果栈空,则起始位置更新为i; 如果栈不空,则肯定能与栈顶的左括号匹配,然后考虑弹出一个左括号后的栈: 若栈空,则说明此次是一个匹配,匹配长度为:i-start,然

顺序栈(进制转换 + 括号匹配 + 判断栈表 + 最长括号匹配长度)

#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 #define STACKLINCREMENT 10

栈的应用之括号匹配的检验

栈的实际应用很多,其中括号匹配是很常见的例子.下面列出基本算法和源代码,标明注释以便日后复习和翻阅. Description: 利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的 顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式.输入一个包含上 述括号的表达式,检验括号是否配对.本题给出部分check()函数,要求将check()函数补充完整,并完成 整个程序. 算法: 代码: 1 void c

栈的应用之括号匹配

思路: 在算法中设置一个栈,每读入一个空号 一:若是右括号: '}'  ' )'   ']'(两种情况): 1:使置于栈顶的最急迫的期待得以消解,需将栈顶元素出栈: 2:不合法的情况,即与栈顶的最急迫的期待不匹配,需将其(括号)压栈: 二:若是左括号:'('  '{'  '[' 作为一个新的更急迫的期待压栈: 顺序栈的代码不再赘述:点击打开链接 //括号匹配 #include"stack.h" int main() { Stack st; InitStack(&st); int

数据结构(C语言) 栈的应用之括号匹配

#include<stdio.h> #include<stdlib.h> typedef struct SqStack { char str[100]; int top; }SqStack; void Push(SqStack* S, char c) { S->top++; S->str[S->top] = c; } void Pop(SqStack* S, char* c) { *c = S->str[S->top]; S->top--; }

(编程训练)再回首,数据结构——(升级版)使用栈判断括号匹配

点击打开 基础版 最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. 在VC++6.0下可运行,当初还写了不少注释. /* ********************************************************** * 3-2 * 设在一个算术表达式中允许使用3种括号:圆括号"(".")",方 * 括号"["."]",花括号"

Python 用栈判断括号匹配

#!/usr/bin/python # -*- coding: UTF-8 -*- from pythonds.basic.stack import Stack def parChecker(symbolString): s = Stack() balanced = True index = 0 while index < len(symbolString) and balanced: symbol =symbolString[index] #左边括号入栈 if symbol == '(': s

数据结构-栈的实现之括号匹配检测

假设表达式中只允许两种括号:().{}:正确表达顺序为:()或{}或({})或{({}{})}的形势:如{(}或(})或({)}的表达形势均不对.算法的设计思想: 出现左括弧则进栈: 出现右括弧则首先检测栈是否为空, 若栈空则表明此右括弧多余,表达式不匹配. 否则和栈顶数据比较,若匹配则栈顶出栈. 否则表明表达式不匹配: 最后若栈空且没有做鱼右括弧则匹配正确,否则表明不匹配. 实现代码如下(Stack.h头文件为之前写的数据结构-栈的顺序结构中写的数组那个方法,用到了里面栈的结构和连个基本栈操作

Java中栈的应用,括号匹配

1 package edu.yuliang.Data_Structure_Basics; 2 3 import org.omg.PortableInterceptor.SYSTEM_EXCEPTION; 4 /* 5 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 6 7 有效字符串需满足: 8 9 左括号必须用相同类型的右括号闭合. 10 左括号必须以正确的顺序闭合. 11 注意空字符串可被认为是有效字符串. 12 13 14 实现思路: 15