【数据结构】抽象数据类型

🦄个人主页:修修修也

🎏所属专栏:数据结构

⚙️操作环境:Visual Studio 2022

186afc93fdc345d28da644b3303a51bf.gif


目录

🎏数据类型

🎏抽象数据类型

结语


🎏数据类型

数据类型:是指一组性质相同的值的集合定义在此集合上的一些操作的总称.

数据类型(data type)是和数据结构密切相关的一个概念,它最早出现在高级程序语言中,用以刻画(程序)操作对象的特性.

数据类型产生的原因是:

在计算机中,内存不是无限大的,如果我们要计算一个像:1+1=2,3+5=8这样的整型数字的加减乘除运算,显然不需要开辟很大的适合小数甚至字符运算的内存空间.于是计算机的研究者们就考虑,要对数据进行分类,分出来多种数据类型.

在用高级程序语言编写的程序中,每个变量,常量表达式都有一个它所属的确定的数据类型.

类型明显或隐含规定了在程序执行期间变量表达式所有可能取值的范围,以及在这些值上允许进行的操作.

因此,数据类型是一个值的集合定义在这个值集上的一组操作的总称

例如,C语言中的整型变量,其值集为某个区间上的整数(区间大小依赖于不同的机器),定义在其上的操作为加,减,乘,除和取模等算术运算.

比如,在C语言中变量声明:

int a,b;

这就意味着,在给变量a和b赋值时不能超出int的取值范围,变量a和b之间的运算只能是int类型所允许的运算.

C语言数据类型概览:

标准整数类型的存储大小和值范围的细节
类型存储大小值范围
char1byte-128 到 127 或 0 到 255
unsigned char1byte0 到 255
signed char1byte-128 到 127
int2或4byte-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647
unsigned int2或4byte0 到 65,535 或 0 到 4,294,967,295
short2byte-32,768 到 32,767
unsigned short2byte0 到 65,535
long4byte-2,147,483,648 到 2,147,483,647
unsigned long4byte0 到 4,294,967,295

注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主.

下面列出了32位系统与64位系统的存储大小的差别(windows相同):


标准浮点类型的存储大小,值范围和精度的细节
类型存储大小值范围精度
float4byte1.2E-38到3.4E+386位有效位
double8byte2.3E-308到1.7E+30815位有效位
long double16byte3.4E-4932到1.1E+493219位有效位

在C语言中,按照取值的不同,数据类型可以分为两类:

  • 原子类型:是不可以再分解的基本类型,包括C语言中的基本类型(整型,字符型,实型,枚举类型),指针类型和空类型.
  • 结构类型:由若干个类型组合而成,是可以再分解的.并且它的成分可以是非结构的,也可以是结构的.(如:整型数组是由若干个整形数据组成的).

引入"数据类型"的目的,从硬件的角度看,是作为解释计算机内存中信息含义的一种手段,而对使用数据类型的用户来说,实现了信息的隐蔽,即,将一切用户不必了解的细节都封装在类型中.

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


🎏抽象数据类型

抽象是指抽取出事物具有的普遍性的本质.

它是抽出问题的特征而忽略非本质的细节,是对具体事物的一个概括.

抽象是一种思考问题的方式,它隐藏了繁杂的细节,只保留实现目标所必需的信息.

举个例子,相信大家对这张图一定很熟悉吧:

图片源自百度,仅做举例使用

而这张图经过抽象后:

由具体的人物动作抽象成了规则的色块,甚至最后色块的形状也已经不重要了,这样的抽出事物的特征忽略其非本质的细节,只保留实现目标所必须的信息,我们称之为抽象.


而当我们对已有的数据类型进行抽象,就有了抽象数据类型.

抽象数据类型(Abstract Data Type,ADT):是指一个数学模型及定义在该模型上的一组操作.抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关.

比如我们上文提到的"整型"的例子:各个计算机,不管是大型机,小型机,PC,平板电脑,PDA,包括我们日常使用的手机都拥有"整数"类型,也需要整数间的运算,那么整型其实就是一个抽象数据类型,尽管它在上面提到的这些在不同计算机中实现方法上可能不一样,但由于其定义的数学特性相同,在计算机编程者看来,它们都是相同的.因此,"抽象"的意义在于数据类型的数学抽象特性.

并且,抽象数据类型不仅仅指那些已经定义并实现的数据类型,还可以是计算机编程者在设计软件程序时自己定义的数据类型.

比如我们编写关于计算机绘图或者地图类的软件系统,经常都会用到坐标.也就是说,总是有成对出现的x和y,在3D系统中还有z出现,既然这三个整型数字是始终在一起出现,我们就定义一个叫point的抽象数据类型,他有x,y,z三个整型变量,这样我们很方便地操作一个point数据变量就能知道这一点的坐标了.

我们用C语言实现一下这个叫point的抽象数据类型:

typedef struct {int x;int y;int z;
} point;int main() {//创建类型为point的两个变量p1,p2point p1;point p2;//给变量p1赋值p1.x = 1;p1.y = 2;p1.z = 3;//给变量p2赋值p2.x = 4;p2.y = 5;p2.z = 6;return 0;
}

根据抽象数据类型的定义,它还包括定义在该模型上的一组操作.还拿上面的point举例,我们不光定义了它的原子类型组成(int x;int y;int z),抽象数据类型同样也包含了坐标间可以进行的操作,如坐标间求距离啊,坐标间求中点啊,坐标间求直线方程等一系列操作都被包含在point这一抽象数据类型的定义中.

再比如"超级玛丽"的游戏主角"马里奥",我们给他定义了几种基本操作,走(前进,后退,上,下),跳,发射子弹等.

一个抽象数据类型定义了:一个数据对象,数据对象中各数据元素之间的关系及对数据元素的操作.

至于,一个抽象数据类型到底需要哪些操作,这就只能由设计者根据实际需要来定.像马里奥,可能开始只有两种操作,走和跳,后来发现应该要增加一种发射子弹的操作,再后来发现有些玩家希望它可以走得快一点,就有了按住发射子弹键后前进就会"跑"的操作.这都是根据实际情况来设计的.

图片源自百度

事实上,抽象数据类型体现了程序设计中问题分解,抽象和信息隐藏的特性.

抽象数据类型把实际生活中的问题分解为多个规模小且容易处理的问题,然后建立一个计算机能处理的数据模型,并把每个功能模块的实现细节作为一个独立的单元,从而使具体实现过程隐藏起来.

为了便于在后面对抽象数据类型进行规范的描述,我们给出了描述抽象数据类型的标准格式:

ADT 抽象数据类型名
Data数据元素之间逻辑关系的定义
Operation操作1初始条件操作结果描述操作2......操作n......
endADT

结语

在学习了数据结构中抽象数据类型后,我们数据结构的绪论篇的四小节就正式完结了,接下来我们将进入又一个新的篇章:算法.在新的章节中,我们将一起学习并体会到一些大佬编写的"惊为天人"的算法,它们又是如何在其他同样能解决问题的算法中脱颖而出的,其中涉及到的算法设计,算法分析,算法时间复杂度,算法空间复杂度等知识将会对我们后续的学习提供非常大的帮助,希望大家能有所收获,一起学习,一起进步!

相关文章推荐

【数据结构】什么是数据结构?

【数据结构】基本概念和术语

【数据结构】逻辑结构与物理结构

【数据结构】抽象数据类型

......


bdd0dc74c090401c93f7e1eb437c9134.jpeg


数据结构绪论篇思维导图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148781.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

集合原理简记

HashMap 无论在构造函数是否指定数组长度&#xff0c;进行的都是延迟初始化 构造函数作用&#xff1a; 阈值&#xff1a;threshold&#xff0c;每次<<1 &#xff0c;数组长度 负载因子 无参构造&#xff1a;设置默认的负载因子 有参&#xff1a;可以指定初始容量或…

三、thymeleaf基本语法

3.1、基本语法 3.1.1变量表达式&#xff1a;${...} 变量表达式用于在页面中输出指定的内容&#xff0c;此内容可以是变量&#xff0c;可以是集合的元素&#xff0c;也可以是对象的属性。主要用于填充标签的属性值&#xff0c;标签内的文本&#xff0c;以及页面中js变量的值等…

数学建模Matlab之基础操作

作者由于后续课程也要学习Matlab&#xff0c;并且之前也进行了一些数学建模的练习&#xff08;虽然是论文手&#xff09;&#xff0c;所以花了几天零碎时间学习Matlab的基础操作&#xff0c;特此整理。 基本运算 a55 %加法&#xff0c;同理减法 b2^3 %立方 c5*2 %乘法 x 1; …

如何利用mp进行条件查询

在mp中进行条件查询发函数是selectList(); 使用上面的方式参数容易传错&#xff0c;所以可以使用下面的方式进行条件查询&#xff1a; 但是使用这种方式可能传的值为空 使用下面的方式可以避免这种情况发生 总结

PHP8中final关键字的应用-PHP8知识详解

在PHP8中&#xff0c;final的中文含义是最终的、最后的意思。被final修饰过的类和方法就是“最终的版本”。 如果关键字final放在类的前面&#xff0c;则表示该类不能被继承。 如果关键字final放在方法的前面&#xff0c;则表示该 方法不能被重新定义。 如果有一个类的格式为…

Ae 效果:CC Power Pin

扭曲/CC Power Pin Distort/CC Power Pin CC Power Pin &#xff08;CC 强力边角定位&#xff09;与同组内的边角定位 Corner Pin效果非常类似&#xff0c;常用于对源图像的透视扭曲变形和四点跟踪合成。使用 CC Power Pin 会有更多的调整属性和更直观的操作。 ◆ ◆ ◆ 效果…

接口自动化中如何完成接口加密与解密?

加密是一种限制对网络上传输数据的访问权的技术。将密文还原为原始明文的过程称为解密&#xff0c;它是加密的反向处理。在接口开发中使用加密、解密技术&#xff0c;可以防止机密数据被泄露或篡改。在接口自动化测试过程中&#xff0c;如果要验证加密接口响应值正确性的话&…

BGP服务器租用价格表_腾讯云PK阿里云

BGP云服务器像阿里云和腾讯云均是BGP多线网络&#xff0c;速度更快延迟更低&#xff0c;阿里云BGP服务器2核2G3M带宽优惠价格108元一年起&#xff0c;腾讯云BGP服务器2核2G3M带宽95元一年起&#xff0c;阿腾云分享更多云服务器配置如2核4G、4核8G、8核16G等配置价格表如下&…

【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(LDxLDxR)?

将内存中的数据搬到 NEON 寄存器,有很多指令可以完成,熟悉这些指令是必须的。 1 LD1 (multiple structures) 将多个单元素结构加载到一个,两个,三个或四个寄存器上。该指令从内存中加载多个单元结构,并将结果写入一、二、三或四个 SIMD&FP 寄存器。 无偏移 一个寄存…

最短路径专题5 最短路径

题目&#xff1a; 样例&#xff1a; 输入 4 5 0 2 0 1 2 0 2 5 0 3 1 1 2 2 3 2 2 输出 3 0->3->2 思路&#xff1a; 根据题目意思&#xff0c;求最短路&#xff0c;这个根据平时的Dijkstra&#xff08;堆优化&#xff09;即可&#xff0c;关键在于求路径的方法&#x…

【Linux】[gdb]Linux环境下如何调试代码

一、code.c文件 我们首先创建一个code.c文件&#xff0c;写一段简单代码&#xff0c;用于测试。 二、makefile文件 然后&#xff0c;我们可以编写makefile文件&#xff0c;使得code.c文件能够进行编译。&#xff08;当然也可以不写makefile文件&#xff0c;直接对code.c进行编…

大选择核网络在遥感目标检测中的应用

摘要 论文链接&#xff1a;https://arxiv.org/pdf/2303.09030.pdf 最近关于遥感目标检测的研究主要集中在改进有向边界框的表示&#xff0c;但忽略了遥感场景中呈现的独特先验知识。这种先验知识很有用&#xff0c;因为如果没有参考足够远的上下文&#xff0c;可能会错误地检测…

设计模式探索:从理论到实践的编码示例 (软件设计师笔记)

&#x1f600;前言 设计模式&#xff0c;作为软件工程领域的核心概念之一&#xff0c;向我们展示了开发过程中面对的典型问题的经典解决方案。这些模式不仅帮助开发者创建更加结构化、模块化和可维护的代码&#xff0c;而且也促进了代码的复用性。通过这篇文章&#xff0c;我们…

windows系统下pycharm配置anaconda

参考&#xff1a;超详细的PycharmAnconda安装配置教程_pycharm conda_罅隙的博客-CSDN博客 下载好anaconda安装后&#xff0c;比如我们安装在D盘anaconda文件夹下&#xff0c;在pycharm配置好环境激活时出现问题&#xff0c;可能是电脑没有配置环境变量 需要将一下4行添加到电…

axb_2019_brop64

axb_2019_brop64 Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)64位&#xff0c;只开了NX __int64 repeater() {size_t v1; // raxchar s[208]; // [rsp0h] [rbp-D0h] BYREFprintf("…

Qt扩展-QCustomPlot 用户交互

QCustomPlot 用户交互 一、概述二、操作范围三、选择机制1. 控制Graph的可选择性和选择状态2. 所选对象的外观3. 多部分对象4. 对选择变化做出反应 四、用户交互信号 一、概述 QCustomPlot提供了多个内置的用户交互。它们大致可以分为 通过用鼠标拖动和滚动鼠标滚轮进行范围操…

MySQL 性能优化

MySQL 性能优化 数据库命名规范 所有数据库对象名称必须使用小写字母并用下划线分割所有数据库对象名称禁止使用 MySQL 保留关键字&#xff08;如果表名中包含关键字查询时&#xff0c;需要将其用单引号括起来&#xff09;数据库对象的命名要能做到见名识意&#xff0c;并且最…

微信小程序-1

微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/framework/ 报错在调试器的console里找 一、结构 Ctrl 放大字体 Ctrl - 缩小 设置 - - - 外观设置 - - - 可以修改喜欢的主题颜色 index.js index.json index.wxml 》 html <view class"box&qu…

Ubuntu安装samba服务器

为了window系统下能够像访问本地目录一样访问ubuntu系统下的目录&#xff0c;这里我通过安装samba服务器&#xff0c;将ubuntu系统的文件目录通过网络挂载的方式共享出来&#xff0c;以便在window下就能够对ubuntu系统的文件进行读写等访问操作&#xff0c;这里记录一下samba服…

SpringBoot快速入门

搭建SpringBoot工程&#xff0c;定义hello方法&#xff0c;返回“Hello SpringBoot” ②导入springboot工程需要继承的父工程&#xff1b;以及web开发的起步依赖。 ③编写Controller ④引导类就是SpringBoot项目的一个入口。 写注解写main方法调用run方法 快速构建SpringBoo…