用顺序栈实现括号匹配
算法思想如下:
#include<stdio.h>
#include<stdbool.h>
#define MAXSIZE 10
typedef struct StackArr {
char data[MAXSIZE];
int top;
}Stack,*PSTACK;
//函数声明
void InitStack(PSTACK);
bool StackEmpty(PSTACK);
bool Push(PSTACK, char);
bool Pop(PSTACK,char*);
//初始化栈
void InitStack(PSTACK S)
{
S->top = -1;
}
//判断栈是否为空
bool StackEmpty(PSTACK S)
{
if (S->top==-1)
return true;
else
return false;
}
//新元素入栈
bool Push(PSTACK S, char val)
{
if (S->top == MAXSIZE - 1) //栈满
return false;
else
{
S->data[++S->top] = val;
return true;
}
}
//栈顶元素出栈,用x返回
bool Pop(PSTACK S,char *x)
{
if (S->top == -1)
return false; //栈空
else
{
*x = S->data[S->top];
S->top--;
return true;
}
}
bool bracketCheck(char str[], int length)
{
Stack S;
InitStack(&S);
char topElem;
for (int i = 0; i < length; i++)
{
if (str[i] == '(' ||str[i]== '{' ||str[i]== '[') {
Push(&S, str[i]);
}
else
{
if (StackEmpty(&S))
return false;
Pop(&S, &topElem);
if (str[i] == ')' && topElem != '(')
return false;
if (str[i] == '}' && topElem != '{')
return false;
if (str[i] == ']' && topElem != '[')
return false;
}
}
return StackEmpty(&S);
}
int main(void)
{
char x[6] = { '{','(','(',')',')','}' };
if (bracketCheck(x, 6))
{
printf("匹配成功!");
}
else
{
printf("匹配失败!");
}
return 0;
}
数据结构学习ing