Triển khai Stack trong JavaScript

Ngày đăng: 26/01/2021   -    Cập nhật: 26/01/2021
Trong hướng dẫn này, mình sẽ giới thiệu cho bạn cấu trúc dữ liệu Stack trong JavaScript và chỉ cho bạn cách sử dụng một mảng để tạo ra Stack.


Stack trong JavaScript


Stack là gì nhỉ?



Stack là một cấu trúc dữ liệu chứa một danh sách các phần tử. Một ngăn xếp hoạt động dựa trên nguyên tắc LIFO (tức là Last-In, First-Out).


> Còn Queue thì là kiểu FIFO (First In, First Out) 


LIFO có nghĩa là phần tử được thêm gần đây nhất là phần tử đầu tiên bị xóa.


Một stack có hai hoạt động chính chỉ xảy ra ở đầu stack đó là: push và pop.



  • Thao tác push thêm một phần tử vào trên cùng của stack
  • Trong khi thao tác pop sẽ xóa một phần tử khỏi đầu stack


Minh họa thao tác Push và Pop trong Stack


Tên Stack (ngăn xếp) tên bắt nguồn từ sự tương tự với một tập hợp các ngăn xếp vật lý, ví dụ: Các cuốn sách xếp chồng lên nhau.


Một stack có nhiều ứng dụng. Ví dụ, đơn giản nhất là đảo ngược một từ. Để làm điều đó, bạn push một từ vào stack, từng chữ cái và pop các chữ cái từ ngăn xếp.


Các ứng dụng khác của stack là cơ chế Ctrl + Z trong trình soạn thảo văn bản, phân tích cú pháp, gọi hàm và chuyển đổi biểu thức (infix thành postfix, infix thành prefix, postfix thành infix và prefix thành infix).


Quay lại với JavaScript. Kiểu dữ liệu mảng trong JS cung cấp các phương thức push()pop() cho phép bạn sử dụng một mảng như một stack.



Phương thức push()



Phương thức push() cho phép bạn thêm một hoặc nhiều phần tử vào cuối mảng. Phương thức push() trả về giá trị của thuộc tính length chỉ định số phần tử trong mảng.


Nếu bạn coi một mảng là một Stack, thì phương thức push() sẽ thêm một hoặc nhiều phần tử ở trên cùng của ngăn xếp.


Ví dụ sau tạo một mảng trống có tên là stack và thêm vào đó năm số, lần lượt vào cuối mảng stack. Nó giống như đẩy từng số vào đầu stack.




// Tạo một mảng rỗng và coi nó như một stack
let stack = [];

// Đẩy phần tử vào mảng với phương thức push
stack.push(1);
console.log(stack); // [1]

stack.push(2);
console.log(stack); // [1,2]

stack.push(3);
console.log(stack); // [1,2,3]

stack.push(4);
console.log(stack); // [1,2,3,4]

stack.push(5);
console.log(stack); // [1,2,3,4,5]
 


Hình sau đây minh họa thao tác push 5 số vào stack.


Minh họa thao tác push() trong Stack
 

Ban đầu, stack trống. Sau đó, chúng ta gọi phương thức push() để thêm từng số vào stack. Sau 5 lần gọi, stack có 5 phần tử.


Lưu ý rằng phương thức push() cũng cho phép bạn thêm nhiều mục vào cuối mảng cùng một lúc.



Phương thức pop()



Phương thức pop() loại bỏ phần tử ở cuối mảng và trả lại phần tử cho trình gọi. Nếu mảng trống, phương thức pop() trả về undefined.


Ví dụ sau đây cho thấy cách bật các phần tử từ trên cùng của ngăn xếp bằng phương thức pop().




// Bật phần tử cuối ra khỏi mảng
console.log(stack.pop()); //  5
console.log(stack); // [1,2,3,4];

console.log(stack.pop()); //  4
console.log(stack); // [1,2,3];

console.log(stack.pop()); //  3
console.log(stack); // [1,2];

console.log(stack.pop()); //  2
console.log(stack); // [1];

console.log(stack.pop()); //  1
console.log(stack); // []; -> Mảng trống

console.log(stack.pop()); //  undefined
 


Hình sau đây minh họa thao tác pop():


Minh họa thao tác pop() trong Stack


Ban đầu, stack có 5 phần tử. Phương thức pop() xóa từng phần tử ở cuối mảng, tức là ở đầu ngăn xếp từng phần một. Sau năm lần pop(), stack trống.


Đảo ngược chuỗi bằng cách sử dụng Stack trong JavaScript



Ví dụ sau đây cho bạn thấy cách đảo ngược một chuỗi bằng cách sử dụng Stack trong JS.



function daoNguocChuoi(chuoi) {

    let stack = [];

    // Đẩy từng ký tự vào stack
    for (let i = 0i < chuoi.lengthi++) {
        stack.push(chuoi[i]);
    }

    // Tạo biến chứa kết quả
    let chuoiDaDaoNguoc = "";

    while (stack.length > 0) {

        // Nối từng ký tự bị bật ra khỏi stack
        // vào với nhau
        chuoiDaDaoNguoc += stack.pop();
    }
    return chuoiDaDaoNguoc;
}

// Thử đảo ngược chuỗi
console.log(daoNguocChuoi("NIIT ICT Ha noi")); // ion aH TCI TIIN
 


Cách thức hoạt động chương trình đảo ngược chuỗi trên:


Hàm daoNguocChuoi() chấp nhận một đối số chuoi và trả về phiên bản đã đảo ngược của nó với logic sau:



  • Đầu tiên, lặp qua chuoi và push từng chữ cái vào mảng stack.
  • Thứ hai, pop từng chữ cái từ ngăn xếp và nối chúng lại với nhau.


Tổng kết về Stack trong JavaScript



Trong hướng dẫn này, mình tôi đã chỉ cho bạn cách sử dụng mảng làm cấu trúc dữ liệu Stack trong JavaScript.


Stack có hai phương thức chính push()pop() để thêm phần tử vào và xóa phần tử ở cuối mảng.


> Bạn đang tìm hiểu về lập trình? tham khảo ngay KHÓA HỌC JAVA hoặc KHÓA HỌC PHP (Full stack) để học theo lộ trình bài bản hơn.



---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Học Lập trình chất lượng cao (Since 2002). Học thực tế + Tuyển dụng ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0968051561
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #niithanoi niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #python #php #java
Bình luận Facebook
Khóa học liên quan đến bài viết

Khóa học PHP Full stack [2023] cho người mới bắt đầu

96 giờ
Khóa học Lập trình PHP Full stack, phiên bản cập nhật lần thứ 8. Dạy Lập trình PHP bài bản từ Front end đến Back end + Laravel. Hướng dẫn làm 2 Dự Án Web lớn

KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG

50 giờ
Khóa học giúp học viên sử dụng thành thạo ngôn ngữ Lập trình Python (3x). Hiểu và phát triển được Ứng dụng Web với Django Framework. Học thực hành với Giảng viên cao cấp.

Lập trình PHP với Laravel Framework

42 giờ
Khóa học Lập trình PHP với Laravel Framework được NIIT - ICT HÀ NỘI xây dựng nhằm hoàn thiện kỹ năng lập trình web các các bạn đã biết Lập trình Web PHP thuần.

Khóa học Java Full stack (IJFD)

104 giờ
Học lập trình Java Fullstack với khóa học được xây dựng theo lộ trình bài bản, từ JAVA CƠ BẢN đến JAVA WEB và nâng cao về JAVA FRAMEWORK như: Spring Boot, Hibernate
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!