【数据结构】抽象数据类型
🦄个人主页:修修修也
🎏所属专栏:数据结构
⚙️操作环境:Visual Studio 2022
目录
🎏数据类型
🎏抽象数据类型
结语
🎏数据类型
数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称.
数据类型(data type)是和数据结构密切相关的一个概念,它最早出现在高级程序语言中,用以刻画(程序)操作对象的特性.
数据类型产生的原因是:
在计算机中,内存不是无限大的,如果我们要计算一个像:1+1=2,3+5=8这样的整型数字的加减乘除运算,显然不需要开辟很大的适合小数甚至字符运算的内存空间.于是计算机的研究者们就考虑,要对数据进行分类,分出来多种数据类型.
在用高级程序语言编写的程序中,每个变量,常量或表达式都有一个它所属的确定的数据类型.
类型明显或隐含地规定了在程序执行期间变量或表达式所有可能取值的范围,以及在这些值上允许进行的操作.
因此,数据类型是一个值的集合和定义在这个值集上的一组操作的总称。
例如,C语言中的整型变量,其值集为某个区间上的整数(区间大小依赖于不同的机器),定义在其上的操作为加,减,乘,除和取模等算术运算.
比如,在C语言中变量声明:
int a,b;
这就意味着,在给变量a和b赋值时不能超出int的取值范围,变量a和b之间的运算只能是int类型所允许的运算.
C语言数据类型概览:
类型 | 存储大小 | 值范围 |
---|---|---|
char | 1byte | -128 到 127 或 0 到 255 |
unsigned char | 1byte | 0 到 255 |
signed char | 1byte | -128 到 127 |
int | 2或4byte | -32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647 |
unsigned int | 2或4byte | 0 到 65,535 或 0 到 4,294,967,295 |
short | 2byte | -32,768 到 32,767 |
unsigned short | 2byte | 0 到 65,535 |
long | 4byte | -2,147,483,648 到 2,147,483,647 |
unsigned long | 4byte | 0 到 4,294,967,295 |
注意,各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主.
下面列出了32位系统与64位系统的存储大小的差别(windows相同):
类型 | 存储大小 | 值范围 | 精度 |
---|---|---|---|
float | 4byte | 1.2E-38到3.4E+38 | 6位有效位 |
double | 8byte | 2.3E-308到1.7E+308 | 15位有效位 |
long double | 16byte | 3.4E-4932到1.1E+4932 | 19位有效位 |
在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
结语
在学习了数据结构中抽象数据类型后,我们数据结构的绪论篇的四小节就正式完结了,接下来我们将进入又一个新的篇章:算法.在新的章节中,我们将一起学习并体会到一些大佬编写的"惊为天人"的算法,它们又是如何在其他同样能解决问题的算法中脱颖而出的,其中涉及到的算法设计,算法分析,算法时间复杂度,算法空间复杂度等知识将会对我们后续的学习提供非常大的帮助,希望大家能有所收获,一起学习,一起进步!
相关文章推荐
【数据结构】什么是数据结构?
【数据结构】基本概念和术语
【数据结构】逻辑结构与物理结构
【数据结构】抽象数据类型
......
数据结构绪论篇思维导图:
相关文章:
【数据结构】抽象数据类型
🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 🎏数据类型 🎏抽象数据类型 结语 🎏数据类型 数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称. 数据类型(d…...
Android 查看路由表
Android 查看路由表_android 路由表_念雅的博客-CSDN博客...
vulnhub靶机-DC系列-DC-3
文章目录 信息收集漏洞查找漏洞利用SQL注入John工具密码爆破反弹shell 提权 信息收集 主机扫描 arp-scan -l可以用netdiscover 它是一个主动/被动的ARP 侦查工具。使用Netdiscover工具可以在网络上扫描IP地址,检查在线主机或搜索为它们发送的ARP请求。 netdiscover -r 192.1…...
【CTFHUB】SSRF原理之简单运用(一)
一、漏洞原理 SSRF 服务端请求伪造 原理:在某些网站中提供了从其他服务器获取数据的功能,攻击者能通过构造恶意的URL参数,恶意利用后可作为代理攻击远程或本地的服务器。 二、SSRF的利用 1.对目标外网、内网进行端口扫描。 2.攻击内网或本…...
wepack打包生产环境使用http-proxy-middleware做api代理转发的方法
首先安装http-proxy-middleware依赖,这个用npm和yarn安装都可以。 然后在express服务器的代码增加如下内容: const express require("express"); const app express(); const { createProxyMiddleware, fixRequestBody, } require("h…...
一百八十六、大数据离线数仓完整流程——步骤五、在Hive的DWS层建动态分区表并动态加载数据
一、目的 经过6个月的奋斗,项目的离线数仓部分终于可以上线了,因此整理一下离线数仓的整个流程,既是大家提供一个案例经验,也是对自己近半年的工作进行一个总结。 二、数仓实施步骤 (五)步骤五、在Hive的…...
Idea引入thymeleaf失败解决方法
报错 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback.Fri Sep 29 09:42:00 CST 2023 There was an unexpected error (typeNot Found, status404). 原因:html没有使用thymeleaf 首先要引入…...
Dev C++安装与运行
参考: https://blog.csdn.net/Keven_11/article/details/126388791 https://www.cnblogs.com/-Wallace-/p/cpp-stl.html 2021年真题要求 2022年真题要求 河南省的考试环境 IDE环境 Dev C 安装 下载 安装 点击OK,选择我接受 修改安装路径为D盘d:\Program Fi…...
Docker下如何构建包含延迟插件的RabbitMQ镜像
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…...
Vue3理解(6)
列表渲染 1.v-for指令基于一个数组来渲染列表,v-for指令的值需要使用 item in items形式的特殊语法,items是源数据的数组,而item是迭代项的别名。 2.在v-for块中可以完整访问父作用域内的属性和变量,v-for的第二个参数表示当前项的位置索引。…...
react+IntersectionObserver实现页面丝滑帧动画
实现效果: 加入帧动画前: 普通的静态页面 加入帧动画后: 可以看到,加入帧动画后,页面效果还是比较丝滑的。 技术实现 加入animation动画类 先用 **scss **定义三种动画类: .withAnimation {.fade1 {ani…...
项目实战第四十六讲:财务经营看板
项目实战第四十六讲:财务经营看板 本文是项目实战第四十六讲,财务经营看板。财务模块划分为两类:① 财务工具(执行和业务财务闭环)② 财务报表,本期需求为新增财务看板,共增加4个看板 文章目录 项目实战第四十六讲:财务经营看板1、需求背景2、流程图3、技术方案4、相关…...
【VUE复习·10】v-for 高级::key 作用和原理;尽量不要使用 index 来遍历
总览 1.:key 作用和原理 2.尽量不要使用 index 来遍历 一、:key 作用和原理 1.数据产生串位的原因 在我们使用 index 进行遍历的时候,会出现虚拟 DOM 和 真实 DOM 的渲染问题。 二、尽量不要使用 index 来遍历 详情见视频 1/3 处: https://www.bili…...
阿里云七代云服务器实例、倚天云服务器及通用算力型和经济型实例规格介绍
在目前阿里云的云服务器产品中,既有五代六代实例规格,也有七代和八代倚天云服务器,同时还有通用算力型及经济型这些刚推出不久的新品云服务器实例,其中第五代实例规格目前不在是主推的实例规格了,现在主售的实例规格是…...
《IIS系列》IIS日志文件管理
我们在使用IIS部署网站的时候,随着时间推移,IIS 生成的日志文件可能会消耗大量磁盘空间。 日志可能会填满整个硬盘驱动器,为了缓解此问题,许多用户完全关闭日志记录,但关了记录又会导致出现问题无从排查,故…...
3D孪生场景搭建:模型阵列摆放
阵列摆放概念 阵列摆放是指将物体、设备或元件按照一定的规则和间距排列组合的方式。在工程和科学领域中,阵列式摆放常常用于优化空间利用、提高效率或增强性能。 阵列摆放通常需要考虑间距、角度、方向、对称性等因素,以满足特定的要求和设计目标。不同…...
什么是大数据可视化
在互联网高速发展的当今,5G的兴起加速了数据传输的速度;与此同时,智能物联网如智慧家电、可穿戴设备等产品的火热,进一步扩充了数据获取的渠道。不仅仅在网页上、手机和电脑应用上以秒计产生海量数据,智能设备同时也在…...
python监控ES索引数量变化
文章目录 1, datafram根据相同的key聚合2, 数据合并:获取采集10,20,30分钟es索引数据脚本测试验证 1, datafram根据相同的key聚合 # 创建df1 > json {key:A, value:1 } {key:B, value:2 } data1 {key: [A, B], value: [1, 2]} df1 pd.DataFrame(data1)# 创建d…...
MySQL explain SQL分析工具详解与最佳实践
目录 一、explain工具介绍二、添加示例表和数据用于后续演示三、explain中的列3.1、id列3.2、select_type列3.3、table列3.4、partitions列3.5、type列NULLsystemconsteq_refrefrangeindexALL 3.6、possible_keys列3.7、key列3.8、key_len列3.9、ref列3.10、rows列3.11、filter…...
【2023年11月第四版教材】第16章《采购管理》(第一部分)
第16章《采购管理》(第一部分) 1 章节内容2 管理基础3 管理过程4 采购管理ITTO汇总 1 章节内容 【本章分值预测】大部分内容不变,细节有一些变化,预计选择题考3-4分,案例和论文 都有可能考;是需要重点学习…...
矢量图形编辑软件illustrator 2023 mac软件特点
illustrator 2023 mac是一款矢量图形编辑软件,用于创建和编辑排版、图标、标志、插图和其他类型的矢量图形。 illustrator mac软件特点 矢量图形:illustrator创建的图形是矢量图形,可以无限放大而不失真,这与像素图形编辑软件&am…...
前端架构师之01_JavaScript_Ajax
1 Web基础知识 1.1 Web服务器 Web服务器又称为网站服务器,主要用于提供网上信息浏览服务。常见的Web服务器软件有Apache HTTP Server(简称Apache)、Nginx等。 浏览器与服务器交互 在Web服务器中,请求资源又分为静态资源和动态…...
Java Spring Boot 目录结构介绍
Java Spring Boot 是一个用于简化Java应用程序开发的框架,它提供了一套灵活、易用的开发工具和约定,帮助开发者更快速地构建各种类型的Java应用程序。Spring Boot 的目录结构是一个重要的组成部分,它规定了如何组织和管理项目代码和资源文件。…...
ubuntu apt工具软件操作
apt工具 -----> 网关 国内网络(仓库源) 美国网络(仓库源)/etc/apt/sources.list https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/sudo apt-get update sudo apt install sl 安装包 sudo apt-cache show sl 查看包信…...
【论文阅读】UniDiffuser: Transformer+Diffusion 用于图、文互相推理
而多模态大模型将能够打通各种模态能力,实现任意模态之间转化,被认为是通用式生成模型的未来发展方向。 最近看到不少多模态大模型的工作,有医学、金融混合,还有CV&NLP。 今天介绍: One Transformer Fits All Di…...
Python爬虫教程——解析网页中的元素
前言: 嗨喽~大家好呀,这里是小曼呐 ~ 在我们理解了网页中标签是如何嵌套,以及网页的构成之后, 我们就是可以开始学习使用python中的第三方库BeautifulSoup筛选出一个网页中我们想要得到的数据。 接下来我们了解一下爬取网页信息…...
BiMPM实战文本匹配【上】
引言 今天来实现BiMPM模型进行文本匹配,数据集采用的是中文文本匹配数据集。内容较长,分为上下两部分。 数据准备 数据准备这里和之前的模型有些区别,主要是因为它同时有字符词表和单词词表。 from collections import defaultdict from …...
【C++】构造函数和析构函数第二部分(拷贝构造函数)--- 2023.9.28
目录 什么是拷贝构造函数?编译器默认的拷贝构造函数构造函数的分类及调用结束语 什么是拷贝构造函数? 用一句话来描述为拷贝构造即 “用一个已知的对象去初始化另一个对象” 具体怎么使用我们直接看代码,代码如下: class Maker…...
现在学RPA,还有前途吗,会不会太卷?
RPA是机器人流程自动化的缩写,是一种通过软件机器人模拟人类操作计算机的技术。随着人工智能和自动化技术的不断发展,RPA已经成为了企业数字化转型的重要工具之一。那么,现在学习RPA还有前途吗?会不会太卷? 一、RPA的…...
Vue的详细教程--用Vue-cli搭建SPA项目
Vue的详细教程--用Vue-cli搭建SPA项目 1.Vue-cli是什么2.什么是SPA项目1.vue init webpack spa2.一问一答模式2:运行完上面的命令后,我们需要将当前路径改变到SPA这个文件夹内,然后安装需要的模块此步骤可理解成:maven的web项目创…...
wordpress 变更域名/nba总得分排行榜最新
spring-boot-starter-parent 可以继承spring-boot-starter-parent项目来获取合适的默认设置。 想配置你的项目继承spring-boot-starter-parent只需要简单地设置parent为: <parent><groupId>org.springframework.boot</groupId><artifactId>…...
海拉尔网站建设公司/网络营销的推广手段
公众号关注 「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !从技术而言,Kubernetes 的各项组件并不容易记忆。本文以水族馆为例,用水族馆内的鱼缸、展品等,解释了 Kubernetes 的各种基本构件。作者࿱…...
河北外贸网站建设/搜索引擎调价工具哪个好
ssl证书是一种安全证书,这也是数字证书的一种,一般都是使用于网站的服务器当中的,因此又被称之服务器证书。很多企业都会给网站配置ssl证书,目的是为了保护网站信息安全,防止信息被不法分子盗用。因此,ssl加…...
中小型企业网站优化案例/制作一个小型网站
5G NR协议层的划分 5G NR无线接入网由以下协议实体组成: Service data adaptation protocol (SDAP) 服务数据适应协议Packet data convergence protocol (PDCP) 数据包数据收敛协议Radio link control (RLC) 无线链路控制Medium access control (MAC) 介质访问控制…...
网站建设技术人员工作/正规引流推广公司
简介: handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型) A、处理requet uri 部分(这里指uri template中variable,不含queryString部分࿰…...
孝感网站开发优搏快/杭州seo博客有哪些
返回总目录Database:Nova 会有一些数据需要存放到数据库中,一般使用 MySQL。数据库安装在控制节点上。Nova 使用命名为 “nova” 的数据库。不知道为什么我的devstack里没有nova数据库???123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 …...