通过栈实现括号匹配

xiaoxiao2021-02-27  191

概述

首先输入一个待匹配的括号序列,如果是左括号将其压入栈中,如果是右括号则与当前栈顶的括号相匹配(左中括号匹配右中括号,左小括号匹配右小括号)。

若匹配失败,输出匹配失败,程序结束。若匹配成功,将栈顶括号出栈,直到最后一个括号匹配完成。判断最后栈的状态 为空输出匹配成功不为空输出匹配失败

代码

#include <iostream> #include <string> #define MaxSize 100 using namespace std; typedef char ElemType; typedef struct { ElemType data[MaxSize]; int top; }SqStack; // 栈顶指针指向栈顶元素 void InitStack(SqStack *st) //初始化栈 { st->top=-1; } int StackEmpty(SqStack *st) //判断栈为空 { return (st->top==-1); } void Push(SqStack *st,ElemType x) //元素进栈 { if(st->top==MaxSize-1)//判断栈溢出 { printf("栈上溢出!\n"); } else { st->top++; //移动栈顶位置 st->data[st->top]=x; //元素进栈 } } void Pop(SqStack *st,ElemType *e) //出栈 { if(st->top==-1) { printf("栈下溢出\n"); } else { *e=st->data[st->top]; //元素出栈 st->top--; //移动栈顶位置 } } int main() { SqStack L; SqStack *st=&L; ElemType e; string brackets; int i, n, count = 0;//n表示待检验括号的长度 InitStack(st); //scanf("%d",&n); //scanf("%s",&brackets); cin>>brackets; while(count <= brackets.length()) { if(brackets[count] == '[' || brackets[count] == '(') { //printf("%c\n", brackets); Push(st,brackets[count]); } else if(brackets[count] == ']' || brackets[count] == ')') { //printf("%c\n", brackets); if( brackets[count] == ']' && (st->data[st->top] == '[') || brackets[count] == ')' && (st->data[st->top] == '(')) { Pop(st,&e); } else { printf("匹配失败\n"); return 0; } } count++; } //fflush(stdin); if(st->top == -1) printf("匹配成功\n"); else { printf("匹配失败\n"); } }
转载请注明原文地址: https://www.6miu.com/read-8806.html

最新回复(0)