Cấu trúc dữ liệu JavaScript ngăn xếp

Ngăn xếp là một cấu trúc dữ liệu có nhiều hạn chế hơn so với mảng.

Chúng tôi có thể thêm các mục vào một ngăn xếp chỉ bằng cách thêm chúng lên trên. Và chúng tôi chỉ có thể loại bỏ mục ở trên cùng của ngăn xếp.

Hãy nghĩ về nó như một đống sách. Bạn chỉ có thể thêm sách ở trên cùng và chỉ có thể xóa sách ở trên cùng.

Vì vậy, nếu bạn thêm một loạt sách và sau đó bạn muốn truy cập vào cuốn sách đầu tiên bạn đã thêm, trước tiên bạn cần xóa tất cả các cuốn sách đó cho đến khi tìm thấy cuốn sách bạn đã thêm.

Khái niệm này được gọi là First In, Last Out (FILO)

Mặc dù các mảng trong JavaScript được tích hợp sẵn và chúng ta không cần phải xây dựng chúng, nhưng chúng ta phải triển khai các ngăn xếp.

Chúng tôi sẽ tạo một cấu trúc dữ liệu đóng gói dữ liệu của chúng tôi, làm cho nó không thể truy cập được từ bên ngoài và chúng tôi sẽ chỉ cho phéppush()để thêm dữ liệu vào ngăn xếp vàpop()phương pháp xóa dữ liệu khỏi ngăn xếp.

Chúng ta có thể làm điều này bằng nhiều cách khác nhau. Một cách là sử dụng các lớp và cụ thể là tôi sẽ sử dụnglĩnh vực lớp học riêng. Các trường lớp riêng không phải là một phần của tiêu chuẩn JavaScriptchưa, nhưng chúng có sẵn trong Chrome, Edge, Safari và Node.js kể từ phiên bản 12. Vẫn chưa có trong Firefox, hy vọng sẽ sớm có.

Tại sao tôi sử dụng chúng? Bởi vì chúng cho phép chúng ta rất dễ dàng đóng gói trạng thái bên trong của lớp và bảo vệ nó khỏi bên ngoài.

class Stack {
  #items = []
  push = (element) => this.#items.push(element)
  pop = () => this.#items.pop()
  isempty = () => this.#items.length === 0
  empty = () => (this.#items.length = 0)
  size = () => this.#items.length
}

Chúng tôi có 5 phương pháp công khai:pushpopđể thêm / bớt khỏi ngăn xếp,isemptyđể kiểm tra xem ngăn xếp có trống không,emptyđể làm trống ngăn xếp,sizeđể lấy kích thước ngăn xếp.

Bây giờ chúng ta có thể tạo một đối tượng ngăn xếp từ lớp và làm việc với nó:

const stack = new Stack()
stack.push(1)
stack.push(2)
stack.push(3)
console.log(stack.size()) //3
console.log(stack.pop()) //[ 3 ]
console.log(stack.size()) //2

Mọi thứ sẽ hoạt động theo cùng một cách với tài sản công:

class Stack {
  items = []
  push = (element) => this.items.push(element)
  pop = () => this.items.pop()
  isempty = () => this.items.length === 0
  empty = () => (this.items.length = 0)
  size = () => this.items.length
}

ngoại trừ bây giờ chúng ta có thể kiểm traitemstừ bên ngoài:

const stack = new Stack()
stack.push(2)
console.log(stack.items) //[ 2 ]

trong khi với các thuộc tính lớp riêng, truy cậpstack.itemssẽ trở lạiundefined.

Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript


Các hướng dẫn js khác: