Khi các lập trình viên nói về cấu trúc dữ liệu của Cameron, họ đang đề cập đến điều gì?


18

Khi các lập trình viên nói về "cấu trúc dữ liệu", họ chỉ nói về các kiểu dữ liệu trừu tượng như danh sách , cây , băm , biểu đồ , v.v.?

Hoặc thuật ngữ đó bao gồm bất kỳ cấu trúc nào chứa dữ liệu, chẳng hạn như các kiểu hỗn hợp (đối tượng lớp, cấu trúc, enum, v.v.) và các kiểu nguyên thủy (boolean, int, char, v.v.)?

Tôi chỉ nghe thấy các lập trình viên sử dụng thuật ngữ này để tham chiếu các cấu trúc dữ liệu phức tạp hoặc các kiểu dữ liệu trừu tượng, tuy nhiên bài viết Wikipedia cung cấp danh sách các cấu trúc dữ liệu bao gồm cả kiểu hỗn hợp và kiểu nguyên thủy trong định nghĩa, không phải là điều tôi mong đợi (thậm chí mặc dù nó có ý nghĩa).

Khi tìm kiếm trên mạng tôi thấy những nơi khác đề cập đến thuật ngữ "cấu trúc dữ liệu" theo nghĩa lập trình là chỉ đề cập đến các loại dữ liệu trừu tượng, chẳng hạn như bài giảng này từ Khoa Khoa học Máy tính của Đại học Stony Brook, trong đó nêu

Cấu trúc dữ liệu là một triển khai thực tế của một loại dữ liệu trừu tượng cụ thể.

hoặc wikibook này trên các cấu trúc dữ liệu , sử dụng thuật ngữ trong các câu như thế này:

Vì cấu trúc dữ liệu là trừu tượng cấp cao hơn, nên chúng trình bày cho chúng tôi các thao tác trên các nhóm dữ liệu, chẳng hạn như thêm một mục vào danh sách hoặc tìm kiếm mục ưu tiên cao nhất trong hàng đợi

Vậy tại sao tôi chỉ nghe thấy các lập trình viên đề cập đến các cấu trúc dữ liệu phức tạp hoặc các kiểu dữ liệu trừu tượng khi họ sử dụng thuật ngữ "cấu trúc dữ liệu"? Các lập trình viên có một định nghĩa khác cho thuật ngữ so với định nghĩa từ điển?


1
Thuật ngữ phát triển theo thời gian. Đám đông CS thường sử dụng thuật ngữ cho các loại cấu trúc chung có thể chứa nhiều mục dữ liệu liên quan (danh sách được liên kết, cây, v.v.)
Oded

1
không phải nó chỉ là một thuật ngữ? một chuỗi thực sự là một mảng các ký tự và đó là một cấu trúc dữ liệu đại diện cho một chuỗi các ký tự riêng lẻ
Mithir

3
Không phải "cấu trúc dữ liệu" là một thuật ngữ tự xác định? Đó là bất kỳ cấu trúc nào để lưu trữ dữ liệu! Thật khó để đặt câu hỏi một cách nghiêm túc.
Michael K

1
@Rachel Vì vậy, câu hỏi của bạn thực sự là liệu các kiểu dữ liệu nguyên thủy có phải là cấu trúc dữ liệu hay không? if programmers mean something different when they talk about data structuresvẫn đang bỏ phiếu cho ý kiến ​​mặc dù.
yannis

2
"Nguyên thủy" hoàn toàn phụ thuộc vào phạm vi. Ở cấp độ nhị phân, không có thứ gọi là int, chẳng hạn. Ở cấp độ thấp hơn thậm chí không có bit - chỉ là sai lệch điện. Một lần nữa, đây là một thuật ngữ tự xác định - không phải là một câu hỏi hay.
Michael K

Câu trả lời:


20

Định nghĩa chung về "cấu trúc dữ liệu" là bất cứ điều gì có thể giữ dữ liệu của bạn theo cách có cấu trúc, do đó, điều này sẽ bao gồm các kiểu hỗn hợp và các kiểu nguyên thủy bên cạnh các kiểu dữ liệu trừu tượng. Ví dụ, a stringlà một cấu trúc dữ liệu vì nó có thể chứa một chuỗi các ký tự theo cách có cấu trúc.

Tuy nhiên, thuật ngữ này cũng có một ý nghĩa khác đối với các lập trình viên.

Kể từ khi khái niệm "cấu trúc dữ liệu" như vậy là rộng, các nhà phát triển thường sử dụng một thuật ngữ cụ thể hơn để xác định những gì họ đang nói về, chẳng hạn như classhay data objecthay primitive type, và thời hạn cụ thể sử dụng cho hầu hết các loại dữ liệu phức tạp hoặc trừu tượng là "cấu trúc dữ liệu"

Đây là lý do tại sao bạn nghe thấy "cấu trúc dữ liệu" thường xuyên được sử dụng cho các loại dữ liệu trừu tượng như Mảng, Danh sách, Cây và Hashtables, chứ không phải cho những thứ như kiểu dữ liệu nguyên thủy


4
Tôi nghĩ rằng đồ thị cũng rất phổ biến nhưng chúng hiếm khi được thể hiện trong các thư viện tiêu chuẩn bởi vì chúng rất khó để xây dựng theo cách chung chung và hiệu quả.
Klaim

Vì vậy, khi các lập trình viên nói về "cấu trúc dữ liệu", họ thường nói về các kiểu dữ liệu trừu tượng ? Và mặc dù các kiểu nguyên thủy (như int, bool hoặc char) và các kiểu hỗn hợp (như một lớp, struct hoặc enum) vẫn được các lập trình viên coi là cấu trúc dữ liệu, chúng thường được gọi bằng các thuật ngữ khác nhau?
Rachel

1
@Rachel về mặt kỹ thuật, cấu trúc dữ liệu có thể là một triển khai homebrewed bằng cách sử dụng con trỏ / lớp ect. Tôi đã tạo ra một số "cấu trúc dữ liệu" rất xấu tương tự như các danh sách như là một phần của bài tập về nhà C ++. Chúng tôi chỉ không gọi các cấu trúc dữ liệu thường xuyên vì chúng thường là một cái gì đó cụ thể hơn.
Ben Brocka

@BenBrocka Ahhh vì vậy "cấu trúc dữ liệu" là một thuật ngữ rất rộng bao trùm các đối tượng khác này, tuy nhiên, tốt hơn là nên cụ thể hơn khi nói về cấu trúc dữ liệu và sử dụng các thuật ngữ như "kiểu dữ liệu nguyên thủy" hoặc "đối tượng dữ liệu" thay vì "cấu trúc dữ liệu". Và thời hạn cụ thể thường được sử dụng cho các đối tượng thích Lists, Trees, Graphs, vv chỉ xảy ra được "cấu trúc dữ liệu"
Rachel

1
@Rachel có, mặc dù mọi thứ đều là cấu trúc dữ liệu (nói đúng) thuật ngữ 'cấu trúc dữ liệu' thường dùng để chỉ những kiểu dữ liệu trừu tượng đó. Tôi muốn nói thuật ngữ 'cấu trúc dữ liệu' theo quan điểm của nhà phát triển đề cập đến cách anh ta lưu trữ dữ liệu. Nó có thể là một danh sách trong bộ nhớ, một tệp trong đĩa hoặc có thể là một cấu trúc dữ liệu tùy chỉnh do anh ta tự thực hiện.
Alex

5

Thuật ngữ này đề cập đến cả hai, mặc dù những thứ như intsbooleansthường được coi là kiểu dữ liệu nguyên thủy (hoặc cấu trúc dữ liệu nguyên thủy). Thuật ngữ này chỉ đơn giản đề cập đến bất cứ điều gì lưu trữ dữ liệu theo một cách cụ thể. Chắc chắn intđáp ứng định nghĩa này cũng giống như bảng Hash, chỉ đơn giản hơn.

Thông thường, khi mọi người sử dụng cấu trúc dữ liệu, họ đề cập đến các cấu trúc dữ liệu phức tạp hơn và không phải là cấu trúc dữ liệu đơn giản hơn mà cả hai đều đáp ứng định nghĩa.


2
Tôi không nghĩ tôi từng nghe ai đó gọi intlà "cấu trúc dữ liệu".
Qwertie

2
@Qwertie tôi cũng vậy, nhưng đó vẫn là nó. Nó được gọi là "kiểu dữ liệu" thường xuyên hơn, nhưng điều đó có nghĩa tương tự như "cấu trúc dữ liệu"
Oleksi

0

Định nghĩa đơn giản và rất cơ bản, mà tôi từng nghe về cấu trúc dữ liệu, là lưu trữ dữ liệu vào bộ nhớ theo cách mà các hoạt động cơ bản như chèn, cập nhật, xóa, vv có thể được thực hiện một cách hiệu quả về mặt thời gian và bộ nhớ.

Vì vậy, một kiểu dữ liệu cho biết loại dữ liệu chúng ta đã lưu trữ vào nó. Nó có thể là số nguyên, thập phân, ký tự, chuỗi hoặc một đối tượng. Đây có thể là kiểu tổng hợp hoặc kiểu nguyên thủy ngoài kiểu dữ liệu trừu tượng.

Nhưng, chúng tôi sử dụng cấu trúc dữ liệu khi chúng tôi muốn lưu trữ bất kỳ dữ liệu phức tạp nào trong bộ nhớ. Đây là lý do tại sao chúng ta chỉ nghe về các loại dữ liệu như Mảng, Danh sách, Cây và Hashtables, chứ không phải cho những thứ như kiểu dữ liệu nguyên thủy

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.