창고 의 응용: 괄호 짝 짓 기
2147 단어 창고 와 대열알고리즘 및 데이터 구조 학습 노트
괄호 짝 짓 기 는 보통 값 [] (), {}, [() {}], [({})] 과 같은 것 은 합 법 적 이 며, [] [, [], [], [(]) 와 같은 것 은 불법 입 니 다. 해결 의 방향 은 왼쪽 에서 오른쪽으로 순서대로 창고 에 들 어 가 는 것 입 니 다. 괄호 를 만나면 창고 의 괄호 와 일치 합 니 다. 일치 하지 않 거나 창고 의 꼭대기 가 비어 있 으 면 이 괄호 의 조합 서열 은 일치 하지 않 습 니 다.
스 택 은 스 택 을 배열 로 모 의 할 수도 있 고 C + STL 에 포 장 된 것 도 사용 할 수 있 으 며 스 택 을 스스로 정의 할 수도 있 습 니 다. 시험 과 면접 에서 스 택 을 실현 하 는 것 을 좋아 하기 때문에 저 는 앞에서 배 운 대로 순서 스 택 을 만들어 이 문 제 를 해결 합 니 다.
code:
#include
#include
#include
#define MaxSize 100
typedef struct{
char data[MaxSize];
int top; //
}SqStack;
//
void StackInit(SqStack &S)
{
S.top = 0;
}
//
bool StackPush(SqStack &S, char e)
{
if(S.top == MaxSize){
return false;
}
S.data[S.top++] = e;
// printf("S.data[S.top-1] = %c
", S.data[S.top-1]);
return true;
}
//
bool StackPop(SqStack &S)
{
if(S.top == 0){
return false;
}
S.top--;
return true;
}
//
char GetTop(SqStack S)
{
if(S.top == 0){
exit(1);
}
return S.data[S.top-1];
}
//
bool StackIsEmpty(SqStack S)
{
return (S.top == 0 ? true : false);
}
//
bool check(SqStack S, char e)
{
char stop = GetTop(S); //
bool flag = false;
//
if(stop == '[' && e == ']'){
flag = true;
}
else if(stop == '(' && e == ')'){
flag = true;
}
else if(stop == '{' && e == '}'){
flag = true;
}
return flag;
}
int main()
{
SqStack S;
StackInit(S);
char str[MaxSize];
scanf("%s", str);
printf("str = %s
", str);
int len = strlen(str);
for(int i = 0; i < len; i++){
// printf("str[%d] = %c
", i, str[i]);
if(StackIsEmpty(S)){ //
StackPush(S, str[i]);
}
else if(check(S, str[i])){ //
StackPop(S);
}
else{
StackPush(S, str[i]); //
}
}
if(StackIsEmpty(S)){
printf("Yes
");
}
else{
printf("No
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
c 언어 체인 팀 의 실현텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.