#include <stdio.h>
#include <stdlib.h>
//代码中函数返回值:1表示true,0表示false
#define MaxSize 10 //栈最多可以放几个
typedef struct Stack{
char str[MaxSize]; //栈顺序表
int top; //栈顶指针
}Stack;
void InitStack(Stack *S){
S->top=-1; //栈顶指针初始化为-1
}
int Push(Stack *S,char c){ //进栈函数
if(S->top>=MaxSize)
return 0;
S->top++;
S->str[S->top]=c;
//printf("%c",S->str[S->top]);
//show(*S);
return 1;
}
int Pop(Stack *S,char *c){
if(S->top<0)
return 0;
(*c)=S->str[S->top]; //这里要*c,因为传入的是引用变量
S->top--;
return 1;
}
void show(Stack S){
//printf("%d",S.top);
printf("当前栈内元素为:");
for(int i=0;i<=S.top;i++){ //这里是要<=S.top;因为top是指向栈顶元素,从-1开始的;
printf("%c\t",S.str[i]);
}
printf("\n");
}
int StackEmpty(Stack S){
if(S.top==-1)
return 1;
return 0;
}
int GetTop(Stack S,char* c){
if(S.top<0){
return 0;
}
(*c)=S.str[S.top];
return 1;
}
int bracket(char str[],int length){ //括号匹配算法核心代码
Stack s; //定义一个栈
InitStack(&s); //初始化,栈顶top指向-1;
for(int i=0;i<length;i++){ //遍历括号数组
if(str[i]=='('||str[i]=='['||str[i]=='{'){ //遇到左括号,无脑进栈
Push(&s,str[i]);
//continue;
}else{ //遇到右括号
char TopElem; //定义一个TopElem,存储栈顶元素
//GetTop(s,&TopElem);
Pop(&s,&TopElem); //栈顶元素出栈
if(TopElem=='('&&str[i]!=')') //对比栈顶元素与括号是否匹配
return 0;
if(TopElem=='['&&str[i]!=']')
return 0;
if(TopElem=='{'&&str[i]!='}')
return 0;
}
show(s); //打印一下,处理这个括号后栈的内容
}
return StackEmpty(s); //是不是空栈结束
}
int main()
{
char chr[6] = {'(','(','(',')',')',']'};
//show(s);
//printf("%d",bracket(chr,6));
if(bracket(chr,6)==1){
printf("匹配成功");
}else{
printf("匹配失败");
}
//printf("Hello world!\n");
return 0;
}
栈进行括号匹配用
于 2023-06-14 21:11:25 首次发布