Một cấu trúc đống là một cấu trúc dữ liệu linear với một bộ sưu tập các mục theo nguyên tắc Last-In-First-Out (LIFO).Phía trên cùng của cọc là mục được thêm gần đây nhất vào cọc, và phía dưới cùng của cọc là mục được thêm gần đây nhất.
Bạn có thể nghĩ về cấu trúc dữ liệu đống như một đống món ăn tối: bạn bắt đầu với một, và sau đó bạn đặt một cái khác lên trên nó.Khi bạn lấy các tấm từ đống, tấm đầu tiên bạn xóa khỏi đống là tấm cuối cùng bạn đặt lên trên.
Các đối tượng có hai hoạt động chính: đẩy để thêm một yếu tố vào phía trên của đối tượng và bật để loại bỏ yếu tố khỏi phía trên của đối tượng.Một đối tượng đống có thể có kích cỡ cố định hoặc được thay đổi kích cỡ theo thời gian thực.Các đống hữu ích cho việc sử dụng thiết kế như các thuật toán lùi lại.
Thực hiện các đống
Mặc dù Luau không có cấu trúc dữ liệu được xây dựng sẵn, bạn có thể sử dụng bảng để triển khai các cấu trúc.Ví dụ mã sau đây cho thấy cách tạo một cọc, push một đối tượng cho một cọc, và pop một đối tượng từ cọc.Để sử dụng thực hiện này cho trải nghiệm của bạn, bạn nên lưu nó như một ModuleScript và lưu trữ nó trong ReplicatedStorage , vì vậy cọc của bạn có thể truy cập cho cả khách hàng và máy chủ.
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Kiểm tra xem nếp xếp có trống không
function Stack:isEmpty()
return #self._stack == 0
end
-- Đặt một giá trị mới vào cọc
function Stack:push(value)
table.insert(self._stack, value)
end
-- Lấy một giá trị khỏi đống
function Stack:pop()
if self:isEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
Ví dụ mã sau đây là một ví dụ sử dụng như một Script dưới Workspace .Bạn có thể sửa mã, đánh máyvà vị trí lưu trữ để phù hợp với mục đích sử dụng của riêng bạn, miễn là bạn có mẫu mã thực hiện trước đó được lưu trữ đúng cách.
Ví dụ sử dụng đống
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Thay đổi kết quả của đối tượng chồng Lượt truy cập kết quả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
Nếu bạn chạy mẫu mã trước đó mà không thay đổi bất cứ thứ gì, thành phẩm mong đợi là:
Ví dụ xuất
105201