利用C语言中后进先出的栈的概念实现括号匹配

stack.h

#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2


#define list_init_size 100
#define listincrement 10


typedef int status;
typedef struct stack
{
int *top;
int *base;
int stacksize;
} Stack;
void initlist(Stack *s);
status stackempty(Stack s);
void push(Stack *s,int e);
void pop(Stack *s,int *e);


stack.c

#include "stack.h"
int main()
{
char ch[100];
char *p;
int e = 0;
Stack s;
initlist(&s);
p = ch;
gets(ch);
while(*p)
{
switch(*p)
{
case '{':
case '[':
case '(':
    push(&s,*p++);
break;
case ')':
case ']':
case '}':


    pop(&s,&e);
if((*p == '}' && e == '{') || (*p == ')' && e == '(') || (*p == ']' && e == '['))
{
        p++;
}
else
{
printf("it is eror");
exit(OVERFLOW);
}
break;
   default:
    break;

}
}
if(stackempty(s))
printf("it is ok!");
else
printf("it is error");
return 0;
}


void initlist(Stack *s)
{
s->base = (int *)malloc(list_init_size * sizeof(int));
if(!s->base)
exit(OVERFLOW);
s->top = s->base;
s->stacksize = list_init_size;
}
status stackempty(Stack s)
{
if(s.top == s.base)
return 1;
else
return 0;
}
void push(Stack *s,int e)
{
if(s->top - s->base >= s->stacksize)
{
s->base = (int *)realloc(s->base,(s->stacksize +listincrement)*sizeof(int));
if(!s->base)
exit(OVERFLOW);
s->top = s->base + s->stacksize;
s->stacksize += listincrement;
}
*s->top = e;
s->top++;
}


void pop(Stack *s,int *e)
{
if(s->top == s->base)
printf("stack is empty");
else
*e = *(--s->top);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值