括號匹配

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10

typedef struct{
	char *top;
	char *base;
	int stacksize;
}sqStack;

void StackInit(sqStack *s)
{
	s->base=(char*)malloc(sizeof(char)*STACK_INIT_SIZE);
	if(!s->base)
		exit(0);
	s->top=s->base;
	s->stacksize=STACK_INIT_SIZE;
}
void Push(sqStack *s,char e)      //push in
{
	if(s->top-s->base>=s->stacksize)
	{
		s->base=(char*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(char));
		if(!s->base)
			exit(0);
		s->top=s->base+s->stacksize;
		s->stacksize=s->stacksize+STACKINCREMENT;
	}
	*(s->top)=e;
	s->top++;
}
void Pop(sqStack *s,char *e)//pop out
{
	if(s->base==s->top)return;
	*e=*--(s->top);
}
int StackLen(sqStack s)
{
	return (s.top-s.base);
}
int match(char c,char e)
{
	if((c=='['&&e==']')||(c=='{'&&e=='}'))
		return 0;
	else
		return 1;
}
void Print(sqStack s)
{

}
void main()
{
	sqStack s;
	StackInit(&s);
	char c;
	char e;
	scanf_s("%c",&c,1);
	while (c!='#')
	{
		if(!StackLen(s))
			Push(&s,c);
		else
		{
			Pop(&s,&e);
			printf("----%c-----\n",e);
			if(!match(c,e))
			{
				Push(&s,e);
				Push(&s,c);
			}
			else
			{
				printf("----match-----\n");
			}
		}
		Print(s);
		printf("SIZE:%d\n",StackLen(s));
	scanf_s("%c",&c,1);
	}
	if(!StackLen(s))
		printf("YES!\n");
	else
		printf("NO!\n");
	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章