web-dev-qa-db-ja.com

データ*構造*とデータ*タイプ*の違いを説明する

複合データ型とデータ構造の違いは何ですか? 私は、データ型が何であるかについて明確な考えを持っているのに気付きました、およびそれがデータ構造と同じではない方法、私は言葉に違いを置くことができません。イントロCSコースを教えている場合、違いをどのように説明しますか?

30
zwol

データ構造は、データの特定の操作を効率的に実行できるようにデータを編成する方法の抽象的な説明です。たとえば、バイナリツリーはデータ構造であり、フィボナッチヒープ、AVLツリー、またはスキップリストです。理論家は、特定の仮定の下で特定のアルゴリズムまたは問題を効率的に解決できることを示すために、データ構造を記述し、その特性を証明します。

データタイプは、すべてが何らかのプロパティを共有する具象オブジェクトの(潜在的に無限)クラスです。たとえば、「整数」はすべての無限数の整数を含むデータ型、「文字列」は無限数のすべての文字列を含むデータ型、「32ビット整数」は30で表現可能なすべての整数を含むデータ型です-2ビット。データ型が言語のプリミティブである必要はありません。たとえば、C++では、タイプintはプリミティブです。これは次のとおりです。

struct MyStruct {
    int x, y;
};

この場合、MyStructは、MyStructおよびintというラベルの付いた2つのxsを持つyというラベルの可能なすべてのオブジェクトを表すデータ型です。 。

データ構造のすべての可能なインスタンスを表すデータ型を持つことができます。たとえば、次のデータ型を使用してバイナリ検索ツリーをエンコードできます。

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

要するに、データ構造は、データタイプデータタイプとして多くの異なる方法で実現できるプロパティのセットを持つ数学オブジェクトです。 =は、具体的に構築および表現できる値のクラスです。

37
templatetypedef

データ構造は異なるデータの複数のフィールドで構成されているため、データ型はこれ以上削減できません。

ただし、ほとんどの場合、アナロジーを使用します-データ型はアトムで、データ構造は分子です。 (はい、私は知っています、原子は分割することができますが、目的のために類推が保持されるべきです)。

11
Femaref

データ型は、intなどの基本型を含む任意の型ですが、構造体にも拡張されます。構造は常に基本型および/または他の構造で構成されます。

したがって、intはデータ型ですが、構造体ではありません。一方、struct point {int x; int y; }は、構造体とデータ型の両方です。

3
jun