括号配对

迈不过友情╰ 2022-08-25 05:28 333阅读 0赞

#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 10002

#include “iostream”
#include “cstdlib”
#include “cstdio”
#include “cstring”

using namespace std;

typedef int Status; //Status 相当于 int

typedef struct Stack
{
char * base;
char * top;
}SqStack;

//***********************函数的声明*****************************

void InitStack(SqStack &S) //创建一个空栈
{

S.base = (char *)malloc(sizeof(char) * STACK_INIT_SIZE);
S.top = S.base;
}

Status StackEmpty(SqStack S)//判断是否为空
{
if(S.top == S.base) return TRUE;
else return FALSE;
}

void Push(SqStack &S,char e )//插入元素e为新的栈顶元素
{
* S.top++ = e;
}
void Pop(SqStack &S)//出栈
{
S.top—;
}

char GetTop(SqStack S)
{
return *(S.top-1);
}

void Matching()
{
SqStack S;//定义一个栈
InitStack(S);
int flag = 1;
char str[10002];
cout<<”************请出如括号串(只包含“ (,),{,},[,] ”)***********“<>str;
for(int i=0;i<strlen(str); ++i){// ([[]()])
if(StackEmpty(S) && (str[i] == ‘]‘ || str[i] == ‘)’|| str[i] == ‘}‘)){//第一个字符就为‘]’或‘)’,直接输出No
flag = 0; break;
}
if(str[i] == ‘(‘ || str[i] == ‘[‘|| str[i] == ‘{‘ ) Push(S,str[i]);//接受到‘(’或‘[’后入栈

if( str[i] == ‘]‘ ){ //接受的为‘]’
if(GetTop(S)== ‘[‘) Pop(S);//如果栈顶为’[‘,则出栈,否则括号不匹配,退出循环
else { flag = 0; break;}
}
if( str[i] == ‘)’ ){ //接受的为‘)’
if( GetTop(S)== ‘(‘ ) Pop(S); //如果栈顶为’)’,则出栈,否则括号不匹配,退出循环
else { flag = 0; break;}
}
if( str[i] == ‘}‘ ){ //接受的为‘}’
if( GetTop(S)== ‘{‘ ) Pop(S); //如果栈顶为’}‘,则出栈,否则括号不匹配,退出循环
else { flag = 0; break;}
}
}
if(flag && StackEmpty(S)) cout<<”Yes,括号匹配!”<>ch;
if(ch == ‘N’|| ch == ‘n’) door = 0;
}while(door);

return 0;
}

发表评论

表情:
评论列表 (有 0 条评论,333人围观)

还没有评论,来说两句吧...

相关阅读

    相关 括号配对问题

    描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个

    相关 ACM括号配对问题

    在做南阳理工网站上的 第二 括号配对问题 题目要求如下: 描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0<N<=100),表示有

    相关 括号配对问题

    描述 现在,有一行括号序列,请你检查这行括号是否配对。 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都

    相关 括号配对问题

    括号配对问题,其实是栈的一个应用,很常见也很普通。 栈是最常见的和最重要的数据结构之一,用途非常广泛。它是一种只能在一端进行插入或删除操作的线性表,括号配对是栈的链式储存及