王道408 数据结构括号匹配

王道408 数据结构括号匹配

由于不会用scanf和while来读写括号直接就定义字符数组了

#define MaxSize 50      //定义最大个数
#pragma warning(disable : 4996)
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
typedef struct {
	int data[MaxSize];  //存放栈中元素
	int top;           //栈顶知指针
}SqStack;


// 初始化栈顶指针
void  InitStack(SqStack &S) {
	S.top = -1;
}

//判断栈空
bool StackEmpty(SqStack S) {
	if (S.top == -1) {//栈空
		return true;
	}
	else {           //不空
		return false;
	}
}

//进栈
bool Push(SqStack &S, char x) {
	if (S.top == MaxSize - 1) {//栈满报错
		return false;
	}
	S.data[++S.top] = x;     //指针+1,在入栈
	//等价写法
	//S.top=S.top+1
	//S.data[S.top] = x
	return true;
}

//出栈
bool Pop(SqStack &S, char &x) {
	if (S.top == -1) {    // 栈空报错
		return false;
	}
	x = S.data[S.top--];//先出栈,指针再-1
	return true;
}

//获得栈顶元素
bool GetTop(SqStack &S, char &x) {
	if (S.top == -1) {   //栈空报错
		return false;
	}
	x = S.data[S.top];//x记录栈顶元素
	return true;
}

bool kuohaoCheck(char str[], int length) {
	SqStack S;
	InitStack(S);//初始化一个栈
	for (int i = 0;i < length;i++) {
		if (str[i] == '(' || str[i] == '[' || str[i] == '{') {
			Push(S, str[i]);      //扫描左括号,入栈
		}
		else {
			if (StackEmpty(S)) {// 扫描到右括号,且当前为栈空
				printf("匹配失败");
				return false;
			}
			char topElem;
			Pop(S, topElem);//栈顶元素出栈
			if (str[i] == '('&&topElem != ')') {//判断括号是否相等
				printf("匹配失败");
				return false;
			}
			if (str[i] == '{'&&topElem != '}') {
				printf("匹配失败");
				return false;
			}
			if (str[i] == '['&&topElem != ']') {
				printf("匹配失败");
				return false;
			}
		}
		
	}
	if (StackEmpty(S)) {
		printf("匹配成功");
	}
	else {
		printf("匹配失败");
	}
	//所有括号匹配完成后,栈空说明成功
}
int main() {
	int i = 0;
	char str[MaxSize] = { '(', '(', '(', ')', ')', ')','{','}' };
	kuohaoCheck(str, 8);
}

运行结果
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值