데이터 구조: 스택이란?
먼저 스택입니다!
이제 스택이 무엇인지 궁금할 것입니다. 이 데이터 구조를 이해하는 가장 간단한 방법은 실제 예제로 쉽게 나타낼 수 있습니다. 부엌에 가서 접시가 들어 있는 캐비닛을 열면 저와 같은 경우가 아니라면 접시가 깔끔하게 쌓인 것을 볼 수 있을 것입니다. 여전히 식기세척기를 꺼내야 합니다 😆 이제 접시가 어떻게 끝났는지 생각해 보세요 이 스택에서 사용하고 필요할 때 제거하는 방법. 당신이 접시를 잡으러 갈 때 스택에 마지막으로 놓은 접시가 가장 먼저 제거될 가능성이 높습니다.
이것이 바로 스택 데이터 구조가 작동하는 방식이며 데이터 구조의 한쪽 끝에서만 작업을 허용합니다. 스택을 설명하는 두 개의 쉬운 약어: LIFO(후입선출) 및 FILO(선입선출). 스택의 작업을 참조할 때 삽입 작업을 푸시라고 하고 제거를 팝이라고 합니다.
이제 스택 데이터 구조를 사용하여 당면한 문제를 해결할 수 있는 문제를 살펴보겠습니다.
유효한 괄호
str
, '('
, ')'
, '{'
, '}'
, '['
문자가 포함된 입력']'
이 주어지면 주어진 문자열이 유효한지 확인합니다.다음과 같은 경우 입력
str
이 유효합니다.'()' => true
, '(]' => false
'([])' => true
, '([)]' => false
str
가 유효한 경우 true
를 반환하고 그렇지 않으면 false
를 반환합니다. 단순함을 위해 우리는 이 문제의 엣지 케이스에 대해 걱정하지 않을 것입니다.const isValid = (str) => {
let map = { ')': '(', '}': '{', ']': '[' };
let stack = [];
for (let i = 0; i < str.length; i++) {
if (str[i] === '(' || str[i] === '{' || str[i] === '[') stack.push(str[i]);
else if (map[str[i]] === stack[stack.length - 1]) stack.pop();
else return false;
console.log(stack);
};
return stack.length === 0;
};
isValid("{{}[][[[]]]}");
산출:
[ '{' ]
[ '{', '{' ]
[ '{' ]
[ '{', '[' ]
[ '{' ]
[ '{', '[' ]
[ '{', '[', '[' ]
[ '{', '[', '[', '[' ]
[ '{', '[', '[' ]
[ '{', '[' ]
[ '{' ]
[]
true
위의
isValid
함수에서 스택을 사용하여 접하는 특정 순서로 여는 대괄호를 추적합니다. 여는 대괄호를 만나면 스택에 push()
(추가)합니다. 닫는 대괄호를 만나면 스택에 추가된 마지막 여는 대괄호가 현재 닫는 대괄호와 같은 대괄호 유형인지 확인합니다. 만약 그렇다면 스택에서 여는 대괄호를 제거합니다pop()
. 스택에 추가된 마지막 여는 대괄호가 우리가 만난 닫는 대괄호와 같은 유형이 아니면 false를 반환합니다.함수 실행의 결과 출력에서 스택이
for
루프의 각 반복을 통해 FILO & LIFO 원칙을 준수하고 있음을 알 수 있습니다.이것이 스택 데이터 구조를 더 잘 이해하는 데 도움이 되었기를 바랍니다. 스택을 활용할 수 있는 질문이나 기타 재미있는 문제가 있으면 아래 의견에 남겨주세요.
건배!
Reference
이 문제에 관하여(데이터 구조: 스택이란?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jtswisher/data-structures-what-s-a-stack-2jfd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)