#include <stdio.h>
#include<malloc.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct // 定义结构体类型
{
char date[MAXSIZE];
int top;
} SStack;
void Initstack(SStack *S) // 顺序栈的初始化
{
S=(SStack *)malloc(sizeof(SStack));
S->top = -1;
}
int EmptyStack(SStack *S) // 判断栈是否为空,空栈返回值为 0
{
if(S->top == -1)
{
return 0;
}
else
{
return 1;
}
}
void PushStack(SStack *S, char *e) // 入栈
{
if(S->top == MAXSIZE - 1)
printf("栈已满,无法插入!");
else
{
S->top++;
S->date[S->top] = *e;
}
}
void PopStack(SStack *S, char *e) // 出栈
{
if(S->top == -1)
printf("栈已空,无法出栈!");
else
{
*e = S->date[S->top];
S->top--;
}
}
int LengthStack(SStack *S) // 求栈的长度
{
int length = 0;
length = S->top + 1;
return length;
}
char GetTopStack(SStack *S) // 显示栈顶元素
{
if(S->top == -1)
{
printf("栈已空,没有数据元素可输出!\n");
return;
}
else
{
return S->date[S->top];
}
}
void DisplayStack(SStack *S) // 显示栈内所有元素
{
int i;
printf("栈内元素为:\n");
for(i = S->top; i>=0; i--)
{
printf("%c\n", S->date[i]);
}
}
void DistroyStack(SStack *S) // 销毁栈
{
free(S);
}
int MatchBracket(char list[])
{
int i;
char e;
SStack *s;
s->top = -1;
int len = strlen(list);
for(i=0;i<len;i++)
{
if(list[i] == '(' || list[i] == ')' || list[i] == '[' || list[i] == ']'|| list[i] == '{' || list[i] == '}')
{
if(!EmptyStack(s)) // 栈为空直接入栈
{
PushStack(s, &list[i]);
// DisplayStack(s);
}
else if(((GetTopStack(s) == '(') && (list[i] == ')')) || ((GetTopStack(s) == '[') && (list[i] == ']'))|| ((GetTopStack(s) == '{') && (list[i] == '}')))
{
PopStack(s, &e); // 匹配成功出栈
// DisplayStack(s);
}
else
{
PushStack(s, &list[i]);
// DisplayStack(s);
}
}
}
if(!EmptyStack(s)) // 检验栈是否为空
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int i;
char alist[100];
scanf("%s",alist);
if(MatchBracket(alist))
{
printf("可以正常匹配");
}
else
{
printf("不行");
}
return 0;
}
假设一个表达式中可以包含三种括号“{}“、“()“、“[]“,且这三种括号可以用任意的次序嵌套使用。编写算法,判断给定的表达式中括号是否匹配(假设表达式已存入元素为字符的顺序表中)。
最新推荐文章于 2024-07-21 13:21:21 发布