# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
# define INIT_STACK_SIZE 10
# define STACKINCREMENT 5
typedef struct
{
char * base;
char * top;
int stacksize;
}* PSTACK, STACK;
void Init (PSTACK pS)
{
pS->base = (char *)malloc(sizeof(char) * INIT_STACK_SIZE);
if (!pS->base)
{
printf("内存分配失败!\n");
exit(-1);
}
pS->top = pS->base;
pS->stacksize = INIT_STACK_SIZE;
return;
}
void push (PSTACK pS)
{
return;
}
int match (char ch, char cha)
{
if ((')' == ch && '(' == cha) || (']' == ch && '[' == cha) || ('}' == ch && '{' == cha))
{
return 1;
}
else if ('(' == ch ||'[' == ch || '{' == ch || ')' == ch ||']' == ch || '}' == ch)
{
return 2;
}
return 0;
}
void push (PSTACK pS, char ch)
{
if ((pS->top - pS->base) == pS->stacksize - 1)
{
pS->base = (char *)realloc(pS->base, sizeof(char) * (pS->stacksize + STACKINCREMENT));
if (!pS->base)
{
printf("内存分配失败!\n");
exit(-1);
}
pS->top = pS->base + (pS->stacksize - 1);
pS->stacksize += STACKINCREMENT;
}
*pS->top++ = ch;
return;
}
void pop (PSTACK pS)
{
*(--pS->top) = NULL;
return;
}
int main(void)
{
char ch;
STACK s;
Init(&s);
printf("请输入括号串:");
do
{
ch = getchar();
if (1 == match(ch, *(s.top - 1)))
{
pop(&s);
}
else if (2 == match(ch, *(s.top - 1)))
{
push(&s, ch);
}
else if (ch == '\n')
{
printf("\n输入完成!\n");
if (s.top == s.base)
{
printf("****匹配成功!****\n");
}
else
{
printf("****匹配失败!有%d项不能互相匹配!****\n", s.top - s.base);
}
break;
}
} while ('\n' != ch);
return 0;
}
栈实现括号匹配
最新推荐文章于 2024-03-25 22:51:12 发布