2011-01-07 39 views
24

Khi cố gắng trả lời What is the difference between a composite data type and a data structure? Tôi nhận ra rằng mặc dù tôi có ý tưởng rõ ràng về loại dữ liệu và cách không giống như một cấu trúc cấu trúc, tôi không thể đặt sự khác biệt thành các từ. Nếu bạn đang dạy một khóa học CS giới thiệu, bạn sẽ giải thích sự khác biệt như thế nào?Giải thích sự khác biệt giữa cấu trúc * dữ liệu * và loại dữ liệu *

+0

Cấu trúc dữ liệu ** ** là tập dữ liệu được coi là một thực thể (điều). Một int, ví dụ, là một biến đơn giản, không thể được xem như là một cấu trúc dữ liệu, nhưng một mảng là một cấu trúc dữ liệu (một mảng là một biến được soạn thảo). Kiểu dữ liệu ** ** là tập hợp dữ liệu và thao tác trên chúng. Sự khác biệt chính giữa hai là các hoạt động không được bao gồm trong trường hợp đầu tiên. ** Kiểu dữ liệu trừu tượng ** là một mô hình toán học về cấu trúc dữ liệu và các thao tác trên chúng.Nói cách khác, một ADT là một giao diện cho những gì DS thực hiện. –

Trả lời

33

Dữ liệu cấu trúc là mô tả trừu tượng về cách tổ chức dữ liệu để cho phép các hoạt động nhất định trên đó được thực hiện hiệu quả. Ví dụ, một cây nhị phân là một cấu trúc dữ liệu, như là một đống Fibonacci, cây AVL hoặc skiplist. Các nhà lý thuyết mô tả các cấu trúc dữ liệu và chứng minh các thuộc tính của chúng để cho thấy rằng các thuật toán hoặc các vấn đề nhất định có thể được giải quyết một cách hiệu quả theo các giả định nhất định.

Một dữ liệu loại là một lớp (có thể vô hạn) của các đối tượng cụ thể mà tất cả đều chia sẻ một số thuộc tính. Ví dụ, "số nguyên" là kiểu dữ liệu chứa tất cả các số nguyên vô hạn, "chuỗi" là kiểu dữ liệu chứa tất cả các chuỗi vô hạn và "số nguyên 32 bit" là kiểu dữ liệu chứa tất cả các số nguyên có thể hiển thị trong ba mươi -two bit. Không có yêu cầu rằng một kiểu dữ liệu là một nguyên thủy bằng một ngôn ngữ - ví dụ, trong C++, loại int là một nguyên thủy, như là cái này:

struct MyStruct { 
    int x, y; 
}; 

Trong trường hợp này, MyStruct là một kiểu dữ liệu đại diện tất cả các đối tượng có thể được gắn nhãn MyStruct có hai số int trong các nhãn được gắn nhãn xy.

Có thể có loại dữ liệu thể hiện tất cả các trường hợp có thể có của cấu trúc dữ liệu. Ví dụ, bạn có thể mã hóa một cây tìm kiếm nhị phân với kiểu dữ liệu này:

struct BST { 
    int data; 
    BST* left, *right; 
}; 

Nói tóm lại, một dữ liệu cấu trúc là một đối tượng toán học với một số bộ thuộc tính có thể được thực hiện bằng nhiều cách khác nhau như dữ liệu loại. Một dữ liệu loại chỉ là một loại giá trị có thể được xây dựng và trình bày cụ thể.

+0

Thưa ông, tôi không hiểu sự khác nhau giữa kiểu dữ liệu trừu tượng và kiểu dữ liệu là gì? –

3

loại dữ liệu là bất kỳ loại nào bao gồm các loại cơ sở thích int mà còn mở rộng đến cấu trúc. cấu trúc luôn được tạo thành từ các loại cơ sở và/hoặc các cấu trúc khác.

Vì vậy, int là kiểu dữ liệu chứ không phải cấu trúc. Trong khi đó struct point {int x; int y; } là cả một cấu trúc và một kiểu dữ liệu.

+1

Có một ý nghĩa phổ biến khác về cấu trúc dữ liệu so với cấu trúc ngôn ngữ C. * struct * - xem câu trả lời của templatetypedef dưới đây. –

+0

nó cũng có thể là một lớp học về cơ bản là một cấu trúc với các phương thức. vậy thì sao? – jun

5

Không thể giảm loại dữ liệu nữa, trong khi cấu trúc dữ liệu có thể, vì nó bao gồm nhiều trường dữ liệu khác nhau.

Tuy nhiên, rất có thể, tôi sẽ sử dụng sự tương tự - một kiểu dữ liệu là một nguyên tử, trong khi cấu trúc dữ liệu là các phân tử. (vâng, tôi biết, các nguyên tử có thể được phân chia vv, nhưng sự tương tự nên giữ cho mục đích này).

+0

Tuyệt vời !!! Cảm ơn!!! – beginner

Các vấn đề liên quan