Hashing và Hash Table

Giả sử, chúng ta muốn thiết kế một hệ thống lưu trữ hồ sơ nhân viên. Mỗi hồ sơ sẽ có một key (khóa) để định danh bằng cách dùng số điện thoại. Chúng ta muốn hệ thống đó phải thực hiện các thao tác sau một cách hiệu quả:

  • Thêm mới một số điện thoại và thông tin hồ sơ nhân viên tương ứng.
  • Tìm kiếm một số điện thoại và lấy các thông tin đính kèm.
  • Xóa một số điện thoại và tất cả các thông tin liên quan tới nó.
Tiếp tục đọc

#data-structures, #hashing-data-structure

Deque – Cấu trúc dữ liệu hàng đợi hai đầu

Deque, hay còn gọi là Double Ended Queue, là một phiên bản cấu trúc dữ liệu hàng đợi mà cho phép chèn và xóa phần tử ở cả hai đầu của hàng đợi.

Tiếp tục đọc

#data-structures, #queue-data-structure

Priority Queue – Cấu trúc dữ liệu hàng đợi ưu tiên

Priority Queue (Hàng đợi ưu tiên) là một phần mở rộng của Queue. Nó có các đặc điểm sau:

  • Mọi phần tử trong hàng đợi đều có một mức độ ưu tiên gắn với nó.
  • Một phần tử có độ ưu tiên cao hơn sẽ được xử lý (dequeued) trước một phần tử có độ ưu tiên thấp.
  • Nếu hai phần tử có cùng độ ưu tiên, chúng sẽ được xử lý lần lượt theo thứ tự của chúng trong hàng đợi.
Tiếp tục đọc

#data-structures, #queue-data-structure

Queue – Cấu trúc dữ liệu hàng đợi

Queue (Hàng đợi) là một linear data structure. Queue hoạt động theo cơ chế FIFO (First In First Out). Tức là, phần tử nào được thêm vào đầu tiên sẽ được lấy ra đầu tiên.

Queue mô tả rất tự nhiên hàng đợi của con người trong cuộc sống hàng ngày. Ví dụ, quầy thanh toán ở siêu thị, người xếp hàng đầu tiên đứng đầu hàng đợi sẽ được phục vụ trước. Người mới tới sẽ xếp chèn vào cuối hàng.

Tiếp tục đọc

#data-structures, #queue-data-structure

ArrayList – Lớp ArrayList trong Java

Lớp ArrayList trong Java được xây dựng dựa trên cấu trúc dữ liệu dạng Array (mảng). Lớp ArrayList được sử dụng rộng rãi vì các chức năng và tính linh hoạt của nó. Hầu hết các lập trình viên chọn ArrayList hơn là chọn Array vì nó là một sự thay thế rất tốt cho các mảng truyền thống trong Java. Lớp ArrayList sử dụng một mảng động, có thể thay đổi kích thước, để lưu trữ các phần tử. Nó là một phần của Java Collections Framework.

Tiếp tục đọc

#array-data-structure, #data-structures, #java, #java-collections

LinkedList – Lớp LinkedList trong Java

Lớp LinkedList trong Java được cài đặt theo dạng Doubly Linked List (Danh sách liên kết đôi). Nó thừa kế lớp AbstractSequentialList và implements hai interfaces ListDeque. Nó là một phần của Java Collections Framework.

Tiếp tục đọc

#data-structures, #java, #java-collections, #linked-list-data-structure

Doubly Linked List – Cấu trúc dữ liệu dạng Danh sách liên kết đôi

Một Doubly Linked List (Danh sách liên kết đôi) thì tương tự như Singly Linked List (Danh sách liên kết đơn), ngoại trừ việc mỗi phần tử có thêm một con trỏ (pointer) để trỏ tới phần tử ở trước nó.

Tiếp tục đọc

#data-structures, #linked-list-data-structure

Stack – Lớp Stack trong Java

Collection framework trong Java cung cấp một lớp Stack để mô hình hóa cấu trúc dữ liệu Stack. Lớp này cũng vẫn hoạt động dựa theo cơ chế LIFO (Last In First Out). Tức là, phần tử nào được thêm vào đầu tiên thì sẽ được lấy ra sau cùng.

Tiếp tục đọc

#data-structures, #java, #java-collections, #stack-data-structure

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

Stack (Ngăn xếp) là một linear data structure. Stack hoạt động theo cơ chế LIFO (Last In First Out). Tức là, phần tử nào được thêm vào đầu tiên thì sẽ được lấy ra sau cùng.

Ví dụ, có một cái hộp đựng sách, quyển sách nào được đặt vào đầu tiên sẽ được lấy ra sau cùng. Quyển nào được đặt vào sau cùng sẽ được lấy ra đầu tiên vì nó nằm ngay trên bề mặt. Ở đây cái hộp đựng sách được hiểu như là một Stack (Ngăn xếp).

Tiếp tục đọc

#data-structures, #stack-data-structure

Linked List – Cấu trúc dữ liệu dạng Danh sách liên kết đơn

Singly Linked List (Danh sách liên kết đơn) hay nói ngắn gọn là Linked List là một linear data structure (giống như Array). Không giống như mảng, các thành phần trong danh sách liên kết không được lưu trữ ở các vị trí liên tiếp nhau trong bộ nhớ, mà chúng được liên kết bằng cách sử dụng pointer (con trỏ).

Tiếp tục đọc

#data-structures, #linked-list-data-structure