考研《栈的应用之括号匹配代码实现》使用线性栈去实现
不使用线性栈的基础操作:
//
// BracketCheck.cpp
// Third
//
// Created by Jeffery on 2024/4/3.
//
#include <iostream>
#define MaxSize 10
using namespace std;
bool bracketCheck(char str[], int length){
// 初始化一个栈
int top = -1; // 栈顶指针
for (int i = 0; i < length; i ++){
if (str[i] == '(' || str[i] == '[' || str[i] == '}'){
str[++top] = str[i];
}
// 证明匹配到了右括号了
else {
// 先判断栈是不是为空,如果为空直接范围false(匹配失败)
if (top == -1)
return false;
char x = str[top--];
if (str[i] == ')' && x != '(')
return false;
if (str[i] == ']' && x != '[')
return false;
if (str[i] == '}' && x != '{')
return false;
}
}
if (top == -1) return true;
else return false;
}
int main(){
char str[] = {'(', '(', '(', ')', ')', ')', '}'}; // 加上 '\0' 表示字符串结束
cout << bracketCheck(str, 6) << endl;
return 0;
}
使用线性栈的基本操作:
1. 前提:
// 定义一个结构体
typedef struct{
char data[MaxSize];
int top;
}SqStack;
2. 还需要知道一些基本操作:
博客链接: 函数详情
// 初始化栈
void InitStack(SqStack &S)
// 判断栈是否为空
bool StackEmpty(SqStack S)
// 新元素入栈
bool Push(SqStack &S, char x)
// 栈顶元素出栈,用x 返回
bool Pop(SqStack &S, char x)
3.函数:
bool bracketCheck(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 {
// 先判断栈是不是为空,如果为空直接范围false(匹配失败)
if (StackEmpty(S))
return false;
char x;
Pop(S, x);
if (str[i] == ')' && x != '(')
return false;
if (str[i] == ']' && x != '[')
return false;
if (str[i] == '}' && x != '{')
return false;
}
}
return StackEmpty(S);
}