창고 의 응용 - 괄호 일치 - 데이터 구조

1680 단어 데이터 구조
스 택 의 간단 한 응용, 괄호 가 일치 하 는 문제,
간편 함 을 위해 토론 () [] 
번 거 로 운 return ERROR 제거 창고 용량 이 처리 하기에 부족 하 다.
예 코드:
#include
#include
#include

#define InitStackSize 1000

typedef struct SqStack
{
	char *top,*base;
	int stacksize;
}SqStack;

void InitSqStack(SqStack &s)
{
	s.base=s.top=(char*)malloc(InitStackSize*sizeof(char));
	s.stacksize =InitStackSize;
}

void PushSqStack(SqStack &s,char ch)
{
	*s.top=ch;
	s.top++;
}

bool EmptyStack(SqStack s)
{
	if(s.base==s.top) return true;
	else return false;
}

void PopSqStack(SqStack &s)
{
	s.top--;
}

char GetStackTop(SqStack s)
{
	if(EmptyStack(s)) return '#';
	else return *--s.top;
}

int BracketMatch(SqStack &s,char *st)
{
	char *p=st;
	char ch;
	while(*p!='\0')
	{
		switch(*p)
		{
			case '(':PushSqStack(s,*p);break;
			case '[':PushSqStack(s,*p);break;
			case ')':
			if(EmptyStack(s)) return 0;
		 	ch=GetStackTop(s);
 			if(ch=='(') PopSqStack(s);			
			else return 0; 
			break;	
			case ']':
			if(EmptyStack(s)) return 0;
			ch=GetStackTop(s);
			if(ch=='[') PopSqStack(s);
			else return 0;
			break;
			default:break;	
		}
		p++;
	}
	if(!EmptyStack(s)) return 0;
	return 1;
}

int main()
{
	SqStack stack;
	char str[InitStackSize]; //just including '('')''['']'
	printf("Input the bracket string:
"); while(scanf("%s",&str)!=EOF) { InitSqStack(stack); if(BracketMatch(stack,str)) printf("Match success!
"); else printf("Fail to match.
"); } return 0; }

좋은 웹페이지 즐겨찾기