括号匹配
1.简述
利用栈的思想来实现括号匹配,假设给你一个"{a+c[(a+b)/d]}",判断括号之间是否两两匹配
算法思想:我们可以利用栈来实现,遍历整个字符串,遇到 [ 或 { 或( 就入栈,遇到右括号就出栈 栈顶元素,
判断出栈元素是否和对应右括号匹配,不匹配则匹配失败,匹配成功则接着遍历,遇到右括号则接着
取栈顶元素判断
2.图示
3.代码部分
3.1 栈代码
括号匹配的核心就是利用了栈后进先出的特点,这里我们实现了对栈的一系列的操作,
方便我们后续调用函数,实现起来更加方便
/**
* 括号匹配的实现
* @Date 2024-08-11 10:48
*/
#include <stdio.h>
#define Max 20
typedef struct Stack{
char data[Max];
int top;//栈顶指针
} Stack;
//初始化栈
void InitStack(Stack &stack){
stack.top = -1;
}
//判断栈空
bool isEmpty(Stack &stack){
if(stack.top == -1){
printf("the stack is empty\n");
return true;
}
return false;
}
//判断栈满
bool isFull(Stack &stack){
if (stack.top == Max - 1){
printf("the stack is full");
return true;
}
return false;
}
//入栈
bool Push(Stack &stack,char x){
//判断栈是否满
if (isFull(stack)){
return false;
}
stack.data[++stack.top] = x;
return true;
}
//出栈
bool Pop(Stack &stack){
//判断栈是否为空
if (isEmpty(stack)){
return false;
}
stack.top--;
return true;
}
//获取栈顶元素(只是获取栈顶元素,