Bạn có thật sự hiểu về Stack và Queue trong cấu trúc dữ liệu javascript.

Trước tiên các bạn hãy ghi nhớ rằng hầu hết trong các cuộc phỏng vấn thì cấu trúc dữ liệu trong lập trình không thể bỏ qua. Và cụm từ Stack và Queue cũng được các PM nhắc tới. Cụm từ cấu trúc dữ liệu (Stack và Queue) các bạn cũng nghe cũng nhiều ở trường học ở công ty và ở đâu đó xung quanh về lĩnh vực tin học. Và các bạn cũng biết tầm quan trọng của cấu trúc dữ liệu nó như thế nào trong thực tế hay hay trước mắt mỗi lập trình viên. Hôm nay tôi sẽ gợi ý cho các bạn để lục lọi lại trí nhớ của bạn về Stack và Queue.

Tham gia và đồng hành cùng mọi thành viên khác.

Facebook: Cộng đồng lập trình javascript

Facebook Cộng đồng giới thiệu bài viết, website, sản phẩm tăng traffic.

1 - Stack là gì?

Đối với nhiều người, stack được biết là có cơ chế FILO(Last In First Out).Là một loại cấu trúc dữ liệu là tuyến tính trong đó các dữ liệu được bảo tồn tính trật tự. 

Thật ra các bạn học theo định nghĩa này là tôi đoán gãy răng luôn. Khó hiểu và trừu tượng vl =]]. Để tôi nói theo cách hiểu của cá nhân tôi cho các bạn dễ hình dung. Cơ chế FILO dạng như là thằng nào đến sau mà ăn trước, bất công cho cuộc đời. 

Ví dụ, tôi có một chồng dĩa. Khi người rửa dĩa xong họ xếp lại một chồng, thằng nào rửa sau được xếp lên top và đương nhiên ông nào đến lấy dĩa để ăn buffet thì dĩa xếp top sử dụng.. Tôi thấy các định nghĩa này đi ngược với cuộc đời :D 

Bây giờ chúng ta đã biết cách Stack hoạt động, và cách triển khai nó trong JavaScript như thế nào thì các bạn cùng tôi xem đoạn code phía dưới. Những method cơ bản của stack đó chính là pop, push, peek. #1

class Stack {
  constructor() {
    this.stack = []
  }
  
  // đẩy các phẩn tử vào một mảng để tạo dữ liệu stack
  push(element) {
    this.stack.push(element)
  }
  
  // Xoá phần tử top của stack và trả về gia tri top 
  pop() {
    if (this.isEmpty()) return 'Stack is empty!'
    return this.stack.pop()
  }
  
  // Trả về giá trị top của stack
  peek() {
    if (this.isEmpty()) return 'Stack is empty'
    return this.stack[this.stack.length - 1]
  }
  
  // check
  isEmpty() {
    return !this.stack.length
  }
}

Các bạn có thể check trên https://jsfiddle.net/ copy paste vào và check. 


2 - Queue là gì?

Mới nói Stack là bất công với cuộc đời, thì Queue cũng dạng xếp hàng như vậy nhưng nó trả lại sự công bằng cho cuộc đời =]]. và ở Stack thì có cụm từ thì ở Queue cũng vậy, đó là FIFO (First In First Out). 

Đợi trước ăn trước, or ăn trước về trước. 

Ví dụ: Xếp hàng ở các cửa hàng trà sữa vậy. Ai đến xếp trước thì ắn trước. Chứ ko phải như stack, xếp sau ăn trước. Có ngày phù mỏ: Giờ chúng ta xem cách triển khai nó như thế nào trong javascript.

 #2

class Queue {
constructor() {
this.queue = []
}

enqueue(element) {
this.queue.push(element)
}

dequeue() {
if (this.isEmpty()) return 'Queue is empty' 
return this.queue.shift()
}

peek() {
if (this.isEmpty()) return 'Queue is empty'
return this.queue[0]
}

// helper method
isEmpty() {
return !this.queue.length
}
}

Tượng tự cũng như Stack thôi. Chạy và check lại nhé devjs. 

3 - Tóm lại.

Nói chung các cấu trúc dữ liệu này rất quen thuộc hằng ngày trong các lập trình viên, vì hầu hết các thư viện bây giờ đã hỗ trợ tận răng với các câu trúc thế này thay vì chúng ta tự làm. Nhưng cấu trúc dữ liệu là một chủ đề rất quan trọng thường được hỏi trong các cuộc phỏng vấn của các công ty. Vì thế các bạn cần thật sự nắm kỹ những cụm từ này để có thể bước sâu hơn với những cụm từ cao hơn. Chúc các bạn thành công!


Tham gia và đồng hành cùng mọi thành viên khác.

Facebook: Cộng đồng lập trình javascript

Facebook Cộng đồng giới thiệu bài viết, website, sản phẩm tăng traffic.

Tài liệu tham khảo:

https://stackoverflow.com/questions/1590247/how-do-you-implement-a-stack-and-a-queue-in-javascripthttps://morioh.com/p/37bd6912a1a7/what-are-stack-and-queue-in-javascript