Data Struct and Data Type

数据结构、数据类型

数据类型底层是什么数据结构,数据类型在数据结构上都定义了那些操作。

1. 数据结构(data structure)

  1. 数据结构表达的是:用什么样的结构,组织一类数据。

  2. 分为逻辑结构和物理结构:

    • 基本的逻辑结构有:集合、线性结构、树形结构、图;
    • 物理结构:顺序存储、链式存储;

2. 数据类型(data type)

  1. 数据类型是和数据结构密切相关的,它是:值的集合和定义在这个值集上的一组操作的总称。

    例如:c语言中的一种数据类型:整型变量,其值集为某个区间上的整数,定义在这些整数上的操作为加、减、乘、除和取模等算数运算。

  2. 高级语言中数据类型分为两类:

    • 原子类型:值不可分解,是什么就是什么。如整型、字符型等;

    • 结构类型:其值是由若干成分按某种结构组成的,因此可分解,并且它的成分可以是原子类型也可以是结构类型。比如数组,其值是由若干分量组成的,每个分量可以是整数,或者也可以是数组。

      • 所以,结构类型可以看成由一种数据结构和定义在其上的一组操作组成。
  3. 所以你看,数据结构仅仅代表着一种结构,而我们在编程语言中是使用数据类型,如果编程语言想要实现某种数据结构,那么必须将其封装为一种数据类型,更狭义的说是数据类型中的结构类型。

3. 深入理解

也许你还是有些混沌,但是没关系,在哪里跌倒就在哪里睡着嘛~ 我再说点能让你深入理解的…

  1. 实际上,在计算机中,数据类型的概念并非局限于高级语言中,每个处理器[a]都提供了一组原子类型或结构类型。

    • 例如,一个计算机硬件系统通常含有“位”、“字节”、“字”等原子类型,他们的操作通过计算机设计的一套指令系统直接由电路系统完成;

    • 而高级程序语言提供的数据类型,其操作需要通过编译器或解释器转化为底层,即汇编语言或机器语言的数据类型来实现。

  2. 引入“数据类型”的目的,

    • 从硬件角度看,是作为解释计算机内存中信息含义的一种手段,

    • 而对使用数据类型的用户来说,实现了信息的隐蔽,即将一切用户不必了解的细节都封装在类型中。

      • 例如,用户在使用“整数”类型时,既不需要了解“整数”在计算机内部是如何表示的,也不需要知道其操作是如何实现的。
      • 如“两个整数求和”,程序员注重的仅仅是其“数学上求和”的抽象特性,而不是其硬件的“位”操作如何进行。

    ([a]:处理数据的单元,不局限于CPU,包括硬件系统、操作系统、高级语言、数据库等)




所以, 
在编程语言中运用“数据结构”就是在使用被一层一层封装起来的某种数据类型 
在编程语言中运用“数据结构”就是在使用被一层一层封装起来的某种数据类型 
在编程语言中运用“数据结构”就是在使用被一层一层封装起来的某种数据类型




java 中的hashmap

FAQ:

    1. 为什么要有HashMap

      答:我非常期待能在Java 中使用Hash表 这种数据结构 ,因为它的快速存取特性。

    2. Hash表 和HashMap的关系?

      答:Hash表 是一种逻辑数据结构,HashMap是Java中的一种数据类型(结构类型),它通过代码实现了Hash表 这种数据结构,并在此结构上定义了一系列操作。

    3. 这一章节我们要干嘛?

      答:首先要明白我们是在干嘛,我们是在分析一个叫做哈希表的数据结构吗?

      不是!不是!不是!我们是在讨论一种高级程序设计语言中某个数据类型的实现,它实现了哈希表这种数据结构,但它绝不是哈希表本身,它就是它自己 - HashMap类型。

      不明白的话我再说一句:记不记得你学Map(HashMap父接口)时见到的第一句描述“An object that maps keys to values. ”简单翻译就是:Map是一个键值对对象。但是,可没人告诉过你哈希表是键值对结构。

    4. Java中的数据类型

      答:有些话不明白的说出来,其实容易让人想不明白。所以我想说:

      • 实际上,编程语言中数据类型都是层层封装的结果;
      • 实际上,Java 中只有3类数据类型:原生类型(primitive8个)、数组、Object;
      • 实际上,无论官方的集合框架也好,你自己创建的类也好,都只能是源自于Object并依赖于原有的这3类数据类型;
      • 最终,到现在你可能才会发现,“数组”这种类型竟是如此的重要,在Java 中,如果没有数组作为基础结构,你是不可能构造出任何想实现某种数据结构的Object类型的。

转载于:https://www.cnblogs.com/Dfrank/p/11620076.html

### 回答1: struct element{ keytype key; elementtype data; }; typedef struct sqlist[maxi],这段代码定义了一个名为sqlist的类型,它是一个包含了多个元素的结构体数组。其中,结构体element的定义为包含了两个成员变量,分别是keytype类型的key和elementtype类型的data。 通过使用typedef关键字,我们为这个结构体数组类型起了一个新的别名sqlist。这意味着我们可以在代码中使用sqlist来声明、定义和操作结构体数组,并且可以在后续的代码中直接使用sqlist作为类型。 这里的[maxi]表示sqlist的长度,它是一个常量,意味着sqlist数组在定义时需要指定具体的长度。 总结起来,这段代码定义了一个结构体元素类型为(keytype, elementtype)的结构体数组sqlist,其中sqlist的长度为maxi。 ### 回答2: struct element是一个结构体类型,包含两个成员变量keytype和elementtype。keytype代表关键字类型,elementtype代表元素数据类型。 typedef struct sqlist[maxi]是对结构体类型进行了重新命名,sqlist表示一个数组,数组的元素类型是struct element。maxi表示数组的最大容量。 通过上述定义,我们创建了一个名为sqlist的数组,数组中的每个元素都是一个struct element类型的结构体。每个结构体包含一个关键字和一个元素数据。 使用这样的数据结构,我们可以方便地存储和管理具有关键字和数据的元素集合。通过操作数组中每个元素的关键字和数据,可以实现不同的功能,如搜索指定关键字的元素、插入新元素、删除元素等。 这样的数据结构能够快速地对元素进行查找和访问,适用于需要频繁查询和操作元素集合的场景。同时,通过定义数组的最大容量maxi,可以对数组的大小进行限制,避免内存溢出的问题。 需要注意的是,在使用这个数据结构时,我们需要根据具体的需求,定义合适的关键字和元素数据类型,以及数组的最大容量。同时,对于数组的操作要保证在定义的最大容量范围内,防止越界访问的错误发生。 ### 回答3: typedef struct { keytype key; elementtype data; } element; typedef element sqlist[maxi]; 其中,struct element定义了一个包含key和data两个成员变量的结构体。keytype和elementtype是两个类型,可以根据具体情况进行定义和使用。 typedef struct sqlist[maxi]定义了一个名为sqlist的类型,它是一个长度为maxi的数组,数组的元素类型为element。这样,我们可以通过sqlist来定义并操作一个包含多个element元素的数组。 使用sqlist类型,我们可以方便地创建一个包含多个元素的线性表。例如,假设我们定义了一个sqlist类型的变量list,我们可以通过list[i]来访问数组中的第i个元素,其中i的取值范围为0到maxi-1。 通过使用这个自定义的数据结构,我们可以实现一些基本的线性表操作,比如插入、删除、查找等。具体的实现过程可以根据具体需求进行编写。 使用typedef定义结构体和类型别名可以增加程序的可读性和可维护性,并且方便在不同的地方进行复用。通过定义和使用sqlist数据类型,我们可以更加方便地操作和管理线性表的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值