- vừa được xem lúc

Stacks and Queues phần 1

0 0 21

Người đăng: Hiếu Đỗ

Theo Viblo Asia

Giới thiệu

Chào mừng các bạn quay trở lại với series của chúng ta. Hôm nay chúng ta sẽ tìm hiểu thêm về hai loại CTDL* mới StacksQueues. Chúng ta sẽ tìm hiểu cả hai vì chúng rất giống nhau.
Cả hai đều là CTDL tuyến tính, nghĩa là chúng chỉ cho chúng ta đi qua từng phần tử một. Trong đó chỉ có thể truy cập trực tiếp một phần tử dữ liệu. Chúng ta cùng làm rõ trong phần tiếp theo.

Stacks và Queues giống nhau vì chúng có thể được triển khai theo các cách tương tự nhau và khác biệt chỉ là cách xoá hoặc lấy phần tử từ các loại CTDL này. Không giống như Arrays, HashTables, StacksQueues không có các hành động như chèn, xoá vào hoặc truy cập ngẫu nhiên, mọi thao tác đều với phần tử đầu hoặc cuối của CTDL.

Lý do sử dụng

Tại sao chúng ta lại cần một loại CTDL như thế này.
Trong khoa học máy tính, chúng ta có thể tạo ra Stacks và Queues bằng Arrays hoặc Linked Lists. Và đôi khi thật tốt khi có thể xây dựng một loại CTDL dựa trên những loại CTDL khác, đó thật là một điều tuyệt của KHMT. Chúng ta tạo ra một loại CTDL hạn chế hành động như vậy để có thể hạn chế các hành động của người dùng trên CTDL của bạn, bất kì ai sử dụng CTDL này đều phải tuân theo những quy định của bạn. Việc kiểm soát sẽ đơn giản hơn nhiều khi bạn chỉ cho phép người dùng thao tác 2, 3 hành động trên CTDL thay vì rất nhiều hành động trên CTDL của bạn.

Stack

Là một loại CTDL mà bạn có thể tưởng tượng mỗi phần tử của nó như một cái đĩa. Đó là một phần dữ liệu sau đó thêm một phần dữ liệu xếp chồng lên trên. Sau đó tiếp tục xếp chồng dữ liệu lên trên. Bạn có thể tưởng tượng như một chồng đĩa xếp chồng lên nhau và ta chỉ có thể chạm vào cái đĩa trên cùng. Stacks cũng vậy ta chỉ có thể xem được phần tử trên cùng. Bạn không thể chạm vào phần tử cuối cùng mà chỉ có thể từ thao tác từ trên xuống dưới. Người ta gọi điều này là LITHO hay First In, Last Out.

Suy nghĩ một chút các bạn có thể thấy hầu hết các ngôn ngữ lập trình hiện nay được mô hình hoá theo kiến trúc Stacks. Khi một hàm được gọi trong một hàm, chúng sẽ tuân theo quy tắc đó. hàm viết cuối cùng sẽ được thực hiện trước.
Một ví dụ khác là quay đi quay lại khi vào một trang Web, hoặc hoàn tác khi đang làm một việc gì đó.

Stacks có 3 hàm chính là push, poppeek. Chúng đều có độ phức tạp là O(1).

Queues

Ta có thể tưởng tượng nó như một lối vào, ví dụ khi bạn xếp hàng đi mua vé, người xếp hàng đầu tiên sẽ được mua vé đầu tiên, người xếp cuối cùng sẽ được mua vé cuối cùng. Tức là phần từ được thêm vào đầu tiên có thể lấy và xem đầu tiên, điều này trái ngược với Stacks. Queues là FIFO, hay gọi là First in, first out..
Queues cũng có khá nhiều ứng dựng, ví dụ các bạn tưởng tượng như ứng dụng đặt xe Grap, User... những người đặt xe trước sẽ được phục vụ trước, đặt xe sau sẽ được phục vụ sau và một ứng dụng phổ biến nhất là máy in. Ví dụ có 3 máy tính cùng kết nối đến một in, thì máy nào đặt lệnh in trước sẽ được phục vụ in trước, đặt sau thì in sau.
Ba hàm chính của Queues là enqueue, dequeue, và peek. Chúng đều có độ phức tạp là O(1).

Tạm kết

Chém gió liên thiên cũng nhiều rồi, trong bài tiếp theo mình sẽ cùng các bạn tìm hiểu các cách implement Stacks, Queues theo nhiều cách khác nhau và cách implement Queues bằng Stacks.
Hẹn gặp lại các bạn.

Chú thích

CTDL : Cấu trúc dữ liệu. KHMT : Khoa học máy tính

Bài trước

Bài sau

Bình luận

Bài viết tương tự

- vừa được xem lúc

A* Search Algorithm

What is A* Search Algorithm. How it works. . Explanation.

0 0 42

- vừa được xem lúc

Lodash một thư viện cũng ra gì và này nọ

Lodash là gì. .

0 0 29

- vừa được xem lúc

Nhập môn lý thuyết cơ sở dữ liệu - Phần 2: Mô hình thực thể liên kết

**Chào các bạn, hôm nay mình tiếp tục viết tiếp phần 2 cho series Nhập môn lý thuyết cơ sở dữ liệu. Chắc hẳn qua bài trước các bạn tìm được lý do vì sao mình phải học môn này rồi chứ.

0 0 58

- vừa được xem lúc

Data structures: Hash table

Giới thiệu. Hash Table là một cấu trúc dữ liệu vô cùng quan trọng có ở hầu hết các ngôn ngữ, là một tronng nhữg nền tảng của Cấu trúc dữ liệu và thuật toán.

0 0 25

- vừa được xem lúc

Doubly Linked List

Tổng quan. Tiếp theo chúng ta sẽ tiếp tục tìm hiểu về một loại Linked List khác, được gọi là Doubly Linked List.

0 0 26

- vừa được xem lúc

Stacks và Queues phần 2

Giới thiệu. Nếu các bạn chưa tìm hiểu về Stacks và Queues, các bạn có thể coi lại bài giới thiệu về Stacks và Queues tại đây

0 0 23