데이터 구조 - 스 택 괄호 일치 에서 의 응용
2307 단어 데이터 구조
프로그램 사상: 1. 빈 스 택 을 초기 에 설정 하고 괄호 를 순서대로 읽 습 니 다. 2. 오른쪽 괄호 가 있 으 면 스 택 꼭대기 에 있 는 요 소 를 스 택 에서 나 오 게 합 니 다. 괄호 서열 이 일치 하지 않 으 면 프로그램 을 종료 합 니 다. 3. 왼쪽 괄호 가 있 으 면 요 소 를 스 택 에 누 르 고 알고리즘 이 끝 날 때 스 택 이 비어 있 습 니 다. 그렇지 않 으 면 괄호 서열 이 일치 하지 않 습 니 다.
다음은 예제 코드 입 니 다.
//
#include "stdafx.h"
#include "string.h"
#define ElementType char
#define MaxSize 10
//
typedef struct {
ElementType data[MaxSize];//
int top;//
int size;//
}SqStack;
/*
*/
void InitStack(SqStack &s) {
s.top = -1;
s.size = 0;
}
/*
*/
bool StackEmpty(SqStack s) {
if (s.size == 0) {
return true;
}
return false;
}
/*
*/
bool PushStack(SqStack &s,ElementType e) {
//if(s.top==MaxSize-1)
if (s.size == MaxSize) {
//
return false;
}
s.top++;
s.data[s.top] == e;
s.size++;
return true;
}
/*
*/
ElementType PopStack(SqStack &s) {
//if(s.top==-1)
if (s.size==0) {
//
return NULL;
}
ElementType e = s.data[s.top];
s.top--;
s.size--;
return e;
}
/*
*/
bool CheckMatch(char *str) {
SqStack stack;
InitStack(stack);
int len = strlen(str);
for (int i = 0; i < len; i++)
{
char x = str[i];
ElementType e;
switch (x) {
case '(':
PushStack(stack, x);
break;
case '[':
PushStack(stack, x);
break;
case '{':
PushStack(stack, x);
break;
case ')':
e = PopStack(stack);
if (e != '(') {
return false;
}
break;
case ']':
e = PopStack(stack);
if (e != '[') {
return false;
}
break;
case '}':
e = PopStack(stack);
if (e != '{') {
return false;
}
break;
}
}
bool b = StackEmpty(stack);
if (b) {
return true;
}
return false;
}
void main() {
char str[] = "[({})]";
bool b = CheckMatch(str);
if (b) {
printf_s(" ");
}
else
{
printf_s(" ");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.