#include<stdio.h>
#include<stdlib.h>
#define w 10000
typedef int datatype;
typedef struct
{
datatype a[w]; //定义栈
int top;
}stack;
int isfull(stack *s) //定义ifull函数
{
if(s->top>=w-1)return(1); //如果栈顶为w-1表示已满
else return(0);
}
int isempty(stack *s)
{
if(s->top==-1)return 1; //栈顶为-1表示栈空
else return 0;
}
void push(stack *s,datatype m)
{
if(s->top>=w-1)printf("栈满");
else
{
s->top++; //栈顶+1
s->a[s->top]=m; //栈顶元素为m
}
}
datatype *pop(stack *s)
{
datatype a,*p;
*p=a;
if(isempty(s))
{
printf("栈空");
return(NULL);
}
else
{
*p=s->a[s->top]; //p为栈顶
s->top--; //栈顶下移一位,即弹出原栈顶
return(p);
}
}
void createstack(stack *s)
{
s->top=-1;
}
char gettop(stack *s) //查找栈顶元素函数
{
if(isempty(s) ==1)
{
return -1;
}
else
{
char t= s->a[s->top]; //令t等于栈顶元素
return t;
}
}
int matchbraket(stack *s, char str[100])
{
char *p = str;
while(*p!= '\0')
{
switch (*p)
{
case '[': //让 [ 入栈
push(s, *p);
break;
case '(':
push(s, *p);
break;
case ')':
if ('(' == (gettop(s))) //遇到),如果栈顶为(
{
pop(s); //弹出(
break;
}
else return 0; //若不是,则返回0
case ']':
if ('[' ==(gettop(s)))
{
pop(s);
break;
}
}
if(isempty(s)==1)return 1;
else return 0;
}
}
int main()
{
stack s;
createstack(&s);
char a[100];
int num;
printf("请输入要判断的字符:");
gets(a); //输入字符串
int z=matchbraket(&s,a);
if(z==0)printf("括号不匹配\n");
else printf("括号匹配\n");
return 0;
}
02-26
288
09-21
2605