#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef char DataType;
//数据节点结构体
typedef struct node
{
DataType data;
struct node *next;
}LinkNode;
//管理结构体
typedef struct stack
{
LinkNode *top; //栈顶偏移
int size; //当前元素个数
}Stack;
Stack * InitStack()
{
Stack *s = (Stack *)malloc(sizeof(Stack));
if(s!=NULL)
{
s->top=NULL;
s->size=0;
return s;
}
}
bool IsStackEmpty(Stack *s) // 1 空 0 非空
{
return (s->size==0);
}
bool push(Stack *s,DataType data)
{
LinkNode *newNode = (LinkNode *)malloc(sizeof(LinkNode));
if(newNode!=NULL)
{
newNode->data = data;
newNode->next = s->top;
s->top=newNode;
s->size++;
return true;
}
return false;
}
bool pop(Stack *s,DataType *data)
{
if(IsStackEmpty(s)||s==NULL)
return false;
*data = s->top->data;
s->top=s->top->next;
s->size--;
return true;
}
bool BracketMatchCheck(char *str)
{
Stack *s = InitStack();
char tmp;
int i=0;
for(i=0;str[i]!='\0';i++)
{
switch(str[i])
{
case '(':
push(s,str[i]);//遇到左括号则入栈
break;
case '[':
push(s,str[i]);
break;
case '{':
push(s,str[i]);
break;
case ')':
if(IsStackEmpty(s))
return false;
pop(s,&tmp);
break;
case ']':
if(IsStackEmpty(s))
return false;
pop(s,&tmp);
break;
case '}':
if(IsStackEmpty(s))
return false;
pop(s,&tmp);
break;
default:break;
}
}
if(IsStackEmpty(s))
return true;
return false;
}
int main(int argc, char const *argv[])
{
char tmps[1000];
char tmp;
int frlag=0,fllag=0;
scanf("%[^\n]",tmps);
if(BracketMatchCheck(tmps))
printf("true\n");
else
printf("false\n");
return 0;
}
栈的应用:括号匹配(C语言)
最新推荐文章于 2023-04-29 01:25:11 发布