✨Cấu trúc dữ liệu

Cấu trúc dữ liệu

phải|192|[[Cây nhị phân, một kiểu đơn giản của cấu trúc dữ liệu liên kết rẽ nhánh.]] thumb|right|Bảng băm

Trong khoa học máy tính, cấu trúc dữ liệu là một cách lưu dữ liệu trong máy tính sao cho nó có thể được sử dụng một cách hiệu quả.

Trong thiết kế nhiều loại chương trình, việc chọn cấu trúc dữ liệu là vấn đề quan trọng. Kinh nghiệm trong việc xây dựng các hệ thống lớn cho thấy khó khăn của việc triển khai chương trình, chất lượng và hiệu năng của kết quả cuối cùng phụ thuộc rất nhiều vào việc chọn cấu trúc dữ liệu tốt nhất.

Mỗi loại cấu trúc dữ liệu phù hợp với một vài loại ứng dụng khác nhau, một số cấu trúc dữ liệu dành cho những công việc đặc biệt. Ví dụ, các B-tree đặc biệt phù hợp trong việc thiết kế cơ sở dữ liệu. Sau khi cấu trúc dữ liệu được chọn, người ta thường dễ nhận thấy thuật toán cần sử dụng. Đôi khi trình tự công việc diễn ra theo thứ tự ngược lại: cấu trúc dữ liệu được chọn do những bài toán quan trọng nhất định có thuật toán chạy tốt nhất với một số cấu trúc dữ liệu cụ thể. Trong cả hai trường hợp, việc lựa chọn cấu trúc dữ liệu là rất quan trọng.

Tổng quan

Thông thường, một cấu trúc dữ liệu được chọn cẩn thận sẽ cho phép thực hiện thuật toán hiệu quả hơn. Việc chọn cấu trúc dữ liệu thường bắt đầu từ chọn một cấu trúc dữ liệu trừu tượng. Một cấu trúc dữ liệu được thiết kế tốt cho phép thực hiện nhiều phép toán, sử dụng càng ít tài nguyên, thời gian xử lý và không gian bộ nhớ càng tốt. Các cấu trúc dữ liệu được triển khai bằng cách sử dụng các kiểu dữ liệu, các tham chiếu và các phép toán trên đó được cung cấp bởi một ngôn ngữ lập trình.

Tri thức đó đã dẫn đến sự nổi lên của nhiều ngôn ngữ lập trình và phương pháp thiết kế được hình thức hóa, mà trong đó, nhân tố tổ chức quan trọng là các cấu trúc dữ liệu chứ không phải các thuật toán. Đa số ngôn ngữ có một tính năng thuộc dạng hệ thống module cho phép các cấu trúc dữ liệu được tái sử dụng an toàn trong các ứng dụng khác nhau, bằng cách dùng các giao diện có điều khiển để che các chi tiết cài đặt đã được kiểm thử. Đặc biệt, các ngôn ngữ lập trình hướng đối tượng như C++ và Java sử dụng lớp (class) cho mục đích này.

Vì cấu trúc dữ liệu có tính chất quyết định đối với các chương trình chuyên nghiệp nên có rất nhiều hỗ trợ về cấu trúc dữ liệu trong các thư viện chuẩn của các ngôn ngữ lập trình hiện đại, ví dụ thư viện mẫu chuẩn của C++, Java API, và Microsoft .NET Framework.

Các cấu trúc xây dựng căn bản của hầu hết các cấu trúc dữ liệu là mảng (array), bản ghi (record), tổ hợp phân biệt(?) (discriminated union), và tham chiếu (reference). Ví dụ, tham chiếu khả rỗng (có thể có giá trị null) là một kết hợp của tham chiếu và cấu trúc discriminated union, và cấu trúc dữ liệu liên kết đơn giản nhất, danh sách liên kết, được xây dựng từ các bản ghi và các tham chiếu khả rỗng.

Các nguyên tắc cơ bản

Ngôn ngữ hỗ trợ

Hầu hết hợp ngữ và những ngôn ngữ lập trình cấp thấp, chẳng hạn BCPL (Basic Combined Programming Language), không hỗ trợ sẵn cấu trúc dữ liệu. Ngôn ngữ lập trình ở cấp cao và một số hợp ngữ ở mức cao có những cú pháp hay chức năng sẵn có hỗ trợ những cấu trúc dữ liệu nhất định như là bản ghi và mảng. Ví dụ ngôn ngữ C và Pascal hỗ trợ kiểu cấu trúc và bản ghi bên cạnh hỗ trợ mảng một chiều và mảng đa chiều.

Hầu hết những ngôn ngữ lập trình đều có những thư viện có sẵn, hỗ trợ việc xây dựng cấu trúc dữ liệu, chẳng hạn bộ thư viện chuẩn C++, Java Collections Framework và .Net Framework.

Các cấu trúc dữ liệu thường dùng

Mảng (cấu trúc dữ liệu) (array list) Ngăn xếp (stack)

  • Hàng đợi (queue) *Bảng băm (hash table)
  • Danh sách liên kết (linked list)
  • Cây (cấu trúc dữ liệu) (tree)
  • Đồ thị (cấu trúc dữ liệu) (graph)
👁️ 1 | 🔗 | 💖 | ✨ | 🌍 | ⌚
phải|192|[[Cây nhị phân, một kiểu đơn giản của cấu trúc dữ liệu liên kết rẽ nhánh.]] thumb|right|Bảng băm Trong khoa học máy tính, **cấu trúc dữ liệu** là một cách lưu dữ liệu trong máy
Đây là danh sách các cấu trúc dữ liệu. Bạn có thể xem danh sách thuật ngữ rộng hơn tại danh sách các thuật ngữ liên quan đến cấu trúc dữ liệu và giải thuật.
Trong khoa học máy tính, **cấu trúc dữ liệu cho các tập hợp không giao nhau** là một cấu trúc dữ liệu để lưu trữ một tập hợp các phần tử được phân chia thành
Trong khoa học máy tính, **cấu trúc dữ liệu mảng** hoặc **mảng** là một cấu trúc dữ liệu bao gồm một nhóm các phần tử giá trị hoặc biến, mỗi phần tử được xác định
nhỏ|Ví dụ về một cây nhị phân Trong khoa học máy tính, **cây** là một cấu trúc dữ liệu được sử dụng rộng rãi gồm một tập hợp các nút (tiếng Anh: _node_) được liên
Trong khoa học máy tính, **đống** (tiếng Anh: _heap_) là một cấu trúc dữ liệu dựa trên cây thỏa mãn _tính chất đống_: nếu B là nút con của A thì khóa(A)≥khóa(B). Một hệ quả
Cấu Trúc Dữ Liệu Và Thuật Toán Cuốn sách Cấu trúc dữ liệu và thuật toán được biên soạn dựa trên nội dung các bài giảng mà tác giả sử dụng để giảng dạy cho
Cấu Trúc Dữ Liệu Và Thuật Toán Cuốn sách Cấu trúc dữ liệu và thuật toán được biên soạn dựa trên nội dung các bài giảng mà tác giả sử dụng để giảng dạy cho
Cấu trúc dữ liệu và Thuật toán Data Structure and Algorithms là môn học bắt buộc không những với mỗi sinh viên ngành Công nghệ Thông tin mà còn là môn học bắt buộc và
thumb|Một ví dụ về lấy dữ liệu đầu ra từ truy vấn cơ sở dữ liệu SQL. **Cơ sở dữ liệu** () là một tập hợp các dữ liệu có tổ chức liên quan đến
thumb|Sự tăng trưởng và số hóa các khả năng lưu trữ thông tin trên toàn cầu **Dữ liệu lớn** (Tiếng Anh: **Big data**) là một thuật ngữ cho việc xử lý một tập hợp dữ
nhỏ|Các loại dữ liệu có thể được hình dung thông qua một thiết bị máy tính **Dữ liệu **là chuỗi bất kỳ của một hoặc nhiều ký hiệu có ý nghĩa thông qua việc giải
nhỏ|Cấu trúc của dãy [[ADN|DNA.]] **Cấu trúc** là sự sắp xếp và tổ chức các yếu tố bên trong của một vật hay hệ thống nào đó. Vật liệu cấu trúc bao gồm do con
Trong khoa học máy tính, **kiểu dữ liệu trừu tượng** (tiếng Anh: _abstract data type_, viết tắt: **ADT**) là một mô hình toán học cho kiểu dữ liệu mà ở đó dữ liệu được định
Trong khoa học máy tính, một **container** (_vật chứa_) là một lớp, một cấu trúc dữ liệu, hay một kiểu dữ liệu trừu tượng (ADT) mà thực thể của nó là tập hợp các đối
**Rò rỉ dữ liệu** hay **vi phạm dữ liệu**, **lộ dữ liệu** là "việc tiết lộ, công khai hoặc làm mất thông tin cá nhân một cách trái phép". Kẻ tấn công có nhiều động
**Tái tạo và thu thập dữ liệu 3D** là việc tạo ra các mô hình ba chiều hoặc không gian từ dữ liệu cảm biến. Các kỹ thuật và lý thuyết, nói chung, hoạt động
**Dữ liệu nửa cấu trúc** (tiếng Anh: _Semi-structured data_) là loại dữ liệu tự mô tả và không có giản đồ (_schema_), nghĩa là không có mô tả riêng biệt về kiểu và cấu trúc
Trong lĩnh vực điện toán**, Khôi phục dữ liệu** (hay **Phục hồi dữ liệu**) là quá trình sử dụng các thiết bị, phần mềm lấy lại dữ liệu từ bị hư hỏng, lỗi hoặc bị
**Mô hình cơ sở dữ liệu phân cấp** (tiếng Anh: hierarchical database model) là một loại mô hình dữ liệu, trong đó dữ liệu được tổ chức thành cấu trúc dạng cây. Dữ liệu được
**Cơ sở dữ liệu quan hệ** () là một cơ sở dữ liệu (phổ biến nhất là kỹ thuật số) dựa trên mô hình quan hệ dữ liệu, theo đề xuất của Edgar F. Codd
**Trao đổi dữ liệu điện tử** (Electronic Data Interchange - EDI) là sự truyền thông tin từ máy tính gửi đến máy tính nhận bằng phương tiện điện tử, trong đó có sử dụng một
**Máy truy tìm dữ liệu trực tuyến** hay **máy tìm kiếm** hay **cỗ máy tìm kiếm** (tiếng Anh: _search engine_), hay còn được gọi với nghĩa rộng hơn là **công cụ tìm kiếm** (_search tool_),
nhỏ| Ví dụ về thu thập dữ liệu trong khoa học sinh học: [[Chim cánh cụt Adélie được xác định và được cân mỗi khi chúng đi qua cầu cân tự động trên đường đến
**Hàng đợi** (tiếng Anh: _queue_) là một cấu trúc dữ liệu dùng để chứa các đối tượng làm việc theo cơ chế **FIFO** (viết tắt từ tiếng Anh: _First In First Out_), nghĩa là "vào
phải|khung|Một cây có dán nhãn với 6 đỉnh và 5 cạnh **Cây** là khái niệm quan trọng trong lý thuyết đồ thị, cấu trúc dữ liệu và giải thuật. Cây là một đồ thị mà
nhỏ|315x315px|Một danh bạ điện thoại nhỏ được xem như một bảng băm. Trong khoa học máy tính, **bảng băm** là một cấu trúc dữ liệu sử dụng hàm băm để ánh xạ từ giá trị
phải|Cây hậu tố cho xâu BANANA. Mỗi xâu con được kết thúc bởi ký tự đặc biệt $. Sáu đường từ gốc đến lá (ký hiệu bởi ô vuông) tương ứng với sáu hậu tố
Trong hoạt động tính toán máy tính, **dữ liệu liên kết** mô tả một phương thức tạo ra dữ liệu có cấu trúc để có thể liên kết được với nhau và trở nên có
**Tích hợp dữ liệu** liên quan đến việc kết hợp dữ liệu cư trú trong các nguồn khác nhau và cung cấp cho người dùng một cái nhìn thống nhất về chúng. Quá trình này
**Kho dữ liệu** (tiếng Anh: _data warehouse_) là kho lưu trữ dữ liệu lưu trữ bằng thiết bị điện tử của một tổ chức. Các kho dữ liệu được thiết kế để hỗ trợ việc
Trong khoa học máy tính, **thuật toán dòng dữ liệu** là thuật toán để xử lý các dòng dữ liệu trong đó dữ liệu vào được cung cấp dưới dạng một dãy các phần tử,
thumb|**Cấu trúc protein** từ cấu trúc bậc 1 tới cấu trúc bậc 4. **Protein** (Protid hay Đạm) là những đại phân tử được cấu tạo theo nguyên tắc đa phân mà các đơn phân là
**Dữ liệu sơ cấp** là những dữ liệu chưa có sẵn, được thu thập lần đầu, do chính người nghiên cứu thu thập. Trong thực tế, khi dữ liệu thứ cấp không đáp ứng được
nhỏ|254x254px|Một mô phỏng cho cấu trúc bậc ba của protein, đây là [[myoglobin]] **Cấu trúc bậc ba của protein** là hình dạng ba chiều của một protein. Cấu trúc bậc ba sẽ có một chuỗi
**Hệ thống quản lý cơ sở dữ liệu hoạt động** (còn gọi là OLTP Trên cơ sở dữ liệu Transaction Processing Line), được sử dụng để quản lý Dữ liệu động trong thời gian thực.
thế=Sơ đồ luồng dữ liệu bao gồm lưu trữ dữ liệu, luồng dữ liệu, chức năng và giao diện.|nhỏ|387x387px|Sơ đồ luồng dữ liệu bao gồm lưu trữ dữ liệu, luồng dữ liệu, chức năng và
**Phân tích dữ liệu** là một quá trình kiểm tra, làm sạch, chuyển đổi và mô hình hóa dữ liệu với mục tiêu khám phá thông tin hữu ích, thông báo kết luận và hỗ
Giáo Trình C Và Lập Trình Hướng Đối Tượng Lập trình cấu trúc là phương pháp tổ chức, phân chia chương trình thành các hàm, thủ tục. Chúng được dùng để xử lý dữ liệu
Giáo Trình C Và Lập Trình Hướng Đối Tượng Lập trình cấu trúc là phương pháp tổ chức, phân chia chương trình thành các hàm, thủ tục. Chúng được dùng để xử lý dữ liệu
Giáo Trình C Và Lập Trình Hướng Đối Tượng Lập trình cấu trúc là phương pháp tổ chức, phân chia chương trình thành các hàm, thủ tục. Chúng được dùng để xử lý dữ liệu
Chuẩn hóa cơ sở dữ liệu là một phương pháp khoa học để phân tách (scientific method of breaking down) một bảng có cấu trúc phức tạp (complex table structures) thành những bảng có cấu
Thông tin và dữ liệu mà con người hiểu được tồn tại dưới nhiều dạng khác nhau, ví dụ như các số, các ký tự văn bản, âm thanh, hình ảnh... nhưng trong máy tính
Lược đồ một ngăn xếp Trong khoa học máy tính, một **ngăn xếp** (còn gọi là **bộ xếp chồng**, tiếng Anh: _stack_) là một cấu trúc dữ liệu trừu tượng hoạt động theo nguyên lý
**Máy chủ cơ sở dữ liệu** (_database server_) là một máy chủ sử dụng ứng dụng cơ sở dữ liệu cung cấp các dịch vụ cơ sở dữ liệu cho các chương trình máy tính
**Tập dữ liệu COVID-19** là các cơ sở dữ liệu công khai nhằm chia sẻ dữ liệu các ca bệnh và thông tin y tế liên quan đến đại dịch COVID-19. ## Dữ liệu tổng
**Siêu dữ liệu** (**_metadata_**) là dạng dữ liệu mô tả thông tin chi tiết về dữ liệu. Trong cơ sở dữ liệu, metadata là các sửa đổi dạng biểu diễn khác nhau của các đối
nhỏ|phải|300x300|[[Tam giác Sierpinski]] **Đệ quy** (tiếng Anh: _recursion_) là phương pháp dùng trong các chương trình máy tính trong đó có một hàm tự gọi chính nó. ## Khái niệm hình thức về đệ quy
Trong khoa học máy tính, **treap** và **cây tìm kiếm nhị phân ngẫu nhiên hóa** là hai dạng cấu trúc dữ liệu cây tìm kiếm nhị phân liên quan chặt chẽ đến nhau. Chúng lưu
**Truy cập dữ liệu** là một thuật ngữ chung đề cập đến một quy trình có cả ý nghĩa cụ thể về CNTT và các ý nghĩa khác liên quan đến quyền truy cập theo