栈的应用-括号匹配问题

#include<iostream>

using namespace std;

#define MaxSize 10

typedef struct

{

char data[MaxSize];

int top;

}SqStack;

void InitStack(SqStack& S);

bool IsEmpty(SqStack& S);

bool InStack(SqStack& S, char x);

bool OutStack(SqStack& S);

void Instring(char str[],int length);

bool BracketCheck(SqStack& S,char str[], int length);

int main()

{

SqStack S;

char str[MaxSize];

InitStack(S);

cout << "输入字符数量 :" << endl;

int length;

cin >> length;

Instring(str,length);

BracketCheck(S,str, length);

system("pause");

return 0;

}

//初始化栈

void InitStack(SqStack &S)

{

S.top = -1;

}

//判断栈是否为空

bool IsEmpty(SqStack& S)

{

if (S.top == -1)

return true;

else

return false;

}

//入栈

bool InStack(SqStack& S, char x)

{

if (S.top == MaxSize - 1)

{

cout << "栈满 " << endl;

return false;

}

S.top = S.top + 1;

S.data[S.top] = x;

return true;

}

//出栈

bool OutStack(SqStack& S,char &x)

{

if (IsEmpty(S))

{

cout << "栈空!" << endl;

return false;

}

x=S.data[S.top];

S.top--;

return true;

}

//字符串数组写入

void Instring(char str[],int length)

{

cout << "依次输入" << length << "个字符" << endl;

for (int i = 0; i < length; i++)

{

cin >> str[i];

}

}

//括号匹配

bool BracketCheck(SqStack&S,char str[], int length)

{

for (int i = 0; i < length; i++)

{

if (str[i] == '(' || str[i] == '[' || str[i] == '{')

{

InStack(S, str[i]);

}

else

{

if (IsEmpty(S))

{

cout << "匹配失败!"<< endl;

}

char topElem;

OutStack(S, topElem);

if (str[i] == ')' && topElem != '(')

{

cout << "匹配失败!" << endl;

return false;

}

if (str[i] == ']' && topElem != '[')

{

cout << "匹配失败!" << endl;

return false;

}

if (str[i] == '}' && topElem != '{')

{

cout << "匹配失败!" << endl;

return false;

}

}

}

if (IsEmpty(S))

cout << "匹配成功!" << endl;

else

cout << "匹配失败!" << endl;

return IsEmpty(S);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值