스택은 LIFO(Last-In-First-Out) 원칙을 따르는 아이템 컬렉션이 있는 선형 데이터 구조입니다.스택의 상단은 가장 최근에 스택에 추가된 항목이고, 스택의 하단은 가장 최근에 추가된 항목입니다.
스택 데이터 구조를 저녁 접시 더미로 생각할 수 있습니다: 한 개로 시작하고 위에 다른 것을 더 놓습니다.스택에서 플레이트를 가져올 때, 스택에서 제거하는 첫 번째 항목은 꼭대기에 배치하는 마지막 항목입니다.
스택에는 두 가지 주요 작업이 있습니다: 푸시 스택의 상단에 요소를 추가하고 팝 스택의 상단에서 요소를 제거합니다.스택에는 고정된 크기가 있거나 동적으로 크기가 조정될 수 있습니다.스택은 백트래킹 알고리즘과 같은 디자인 사용에 도움이 됩니다.
스택 구현
Luau에는 기본 데이터 구조로 스택이 없지만, 테이블을 사용하여 스택을 구현할 수 있습니다.다음 코드 샘플은 스택을 만드는 방법, push 스택에 개체를 만드는 방법, 그리고 pop 스택에서 개체를 만드는 방법을 보여줍니다경험에 이 구현을 사용하려면 ModuleScript로 저장하고 ReplicatedStorage에 저장하여 스택이 클라이언트와 서버 모두에서 액세스할 수 있도록 해야 합니다.
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- 스택이 비어 있는지 확인
function Stack:isEmpty()
return #self._stack == 0
end
-- 스택에 새 값 추가
function Stack:push(value)
table.insert(self._stack, value)
end
-- 스택에서 값 제거
function Stack:pop()
if self:isEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
다음 코드 샘플은 아래의 아래에서 사용 예시입니다.이전 구현 코드 샘플을 적절하게 저장하는 한, 코드, 입력및 저장소 위치를 사용자 요구에 맞게 수정할 수 있습니다.
스택 사용 예시
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- 스택 결과 스택 출력 변경s:push(1) -- {1}s:push(5) -- {1, 5}s:push(10) -- {1, 5, 10}print(s:pop()) -- {1, 5} 10print(s:pop()) -- {1} 5s:push(20) -- {1, 20}print(s:pop()) -- {1} 20print(s:pop()) -- {} 1
아무것도 변경하지 않고 이전 코드 샘플을 실행하면 예상 출력은:
예시 출력
105201