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

news2025/1/23 1:05:12

🦄个人主页:修修修也

🎏所属专栏:数据结构

⚙️操作环境: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,p2
    point 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.coloradmin.cn/o/1054438.html

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

相关文章

【vue3】自定义hook函数

假期第三篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 【vue3 】hook函数 hook本质上是一个函数&#xff0c;把setup中使用的Composition API进行了封装 假设需求是获取当前点击时鼠标的坐标 <template><…

Pycharm操作git仓库 合并等

菜单 Git CommitPushUpdate ProjectPullFetchMergreRebase 查询 查询分支 查询本地所有分支 # 查询本地分支 git branch# 查询远程分支 git branch -rPycharm查看当前分支 步骤&#xff1a; Git->Branches 哈喽&#xff0c;大家好&#xff0c;我是[有勇气的牛排]&…

网络正常,微信正常登录,谷歌浏览器无法正常打开(100%解决)

背景&#xff1a; 笔记本电脑&#xff0c;操作系统&#xff1a;windows10&#xff0c;网络&#xff1a;wifi/或者有线连接。 谷歌浏览器&#xff1a;最新版本&#xff1a;115.0.5790.171 可以正常使用微信&#xff0c;无法使用谷歌浏览器打开对应的网址。 解决办法&#xff1a;…

Charles 抓包工具使用详细介绍

1 前言 1.1 介绍 Charles是一款强大的网络抓包工具&#xff0c;主要用于分析和调试网络流量。它适用于多种操作系统&#xff0c;包括 Windows、macOS和linux。 Chaels可以捕获 http和https协议的请求和响应&#xff0c;帮助开发人员和测试人员了解应用程序与服务器支架的通信…

【2023双非保研】信管跨保计算机大类的记录(东南、川大、重大、东北、西电、南理工、杭高院、河海、东华、天大等)

以此篇博客记录我的保研之旅 目录 一、个人情况 二、夏令营 1、国科大杭高院&#xff08;线下&#xff09; 2、南信工&#xff08;线下&#xff09; 3、华中师范&#xff08;线上or线下&#xff09; 4、浙大软件&#xff08;线上&#xff09; 5、东华大学&#xff08;线…

手机电脑数码小程序商城的作用是什么

手机几乎是每个成年人人手一个以上&#xff0c;市场非常大&#xff0c;加之产品更新迭代速度快&#xff0c;每年都会推出多个型号、造型等&#xff0c;因此对高收入群体或爱机人群来说&#xff0c;新手机往往一年或二年时间就会换&#xff0c;或者直接购买当备用机等。 每个城…

C++ 学习系列 -- std::stack 与 std::queue

一 std::stack 与 std::queue 分别是什么&#xff1f; 两者均是 c 中的序列化容器&#xff0c;区别在于&#xff1a; std::stack 元素是先进后出 std::queue 元素是先进先出 二 std::stack 与 std::queue 原理 1 std:statck 2. std::queue 两者底层容器可以是 list 也可以…

创建型设计模式 单例 工厂模式 看这一篇就够了

4&#xff0c;创建型模式 创建型模式的主要关注点是“怎样创建对象&#xff1f;”&#xff0c;它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度&#xff0c;使用者不需要关注对象的创建细节。 创建型模式分为&#xff1a; 单例模式工厂方法模式抽象工程模…

vue3简易文字验证码

大神勿喷&#xff0c;简易版本&#xff0c;demo中可以用一下。 需要几个文字自己codelen 赋值 灵活点直接父组件传过去&#xff0c;可以自己改造 首先创建一个生成数字的js **mathcode.js**function MathCode(num){let str "寻寻觅觅冷冷清清凄凄惨惨戚戚乍暖还寒时候…

LeetCode 热题 HOT 100:回溯专题

LeetCode 热题 HOT 100&#xff1a;https://leetcode.cn/problem-list/2cktkvj/ 文章目录 17. 电话号码的字母组合22. 括号生成39. 组合总和46. 全排列补充&#xff1a;47. 全排列 II &#xff08;待优化)78. 子集79. 单词搜索124. 二叉树中的最大路径和200. 岛屿数量437. 路径…

object-fit,object-position让img标签表现得像背景图那样能自适应和调整显示位置

文章目录 一、object-fit的用法二、object-position的用法 图片在网页中有2种表现形式&#xff0c;使用CSS的background-image或者HTML的img标签来实现。 背景图实现如notion的封面图效果可以使用background-position或者background-size轻松实现&#xff0c;首先来看看notion…

2023年安全员-C证证模拟考试题库及安全员-C证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年安全员-C证证模拟考试题库及安全员-C证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;安全员-C证证模拟考试题库是根据安全员-C证最新版教材&#xff0c;安全员-C证大纲整理而成&#xff08;含2023年…

【Java 进阶篇】JDBC Statement:执行 SQL 语句的重要接口

在Java应用程序中&#xff0c;与数据库进行交互是一项常见的任务。为了执行数据库操作&#xff0c;我们需要使用JDBC&#xff08;Java Database Connectivity&#xff09;来建立与数据库的连接并执行SQL语句。Statement接口是JDBC中的一个重要接口&#xff0c;它用于执行SQL语句…

leetCode 376.摆动序列 贪心算法

如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如&#xff0c; [1, 7, 4, 9, 2, 5] 是一个 摆动序列 &…

AI智能问答系统源码/AI绘画商业系统/支持GPT联网提问/支持Midjourney绘画

一、AI创作系统 SparkAi创作系统是基于国外很火的ChatGPT进行开发的AI智能问答系统和AI绘画系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图…

.360、.halo勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

导言&#xff1a; 在网络犯罪的阴影下&#xff0c;.360和.halo勒索病毒显得格外神秘而危险&#xff0c;它们都属于BeijingCrypt勒索病毒家族旗下的病毒&#xff0c;两者加密特征一致&#xff0c;加密勒索信内容一致。本文91数据恢复将深度解析.360、.halo勒索病毒的内部机制&a…

【算法速查】一篇文章带你快速入门八大排序(上)

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;首先在这里祝大家中秋国庆双节同乐&#xff01;&#xff01;今天用一篇文章为大家把八大排序算法都过一遍&#xff0c;当然由于篇幅的原因不是每…

华为云云耀云服务器L实例评测|Ubuntu系统MySQL 8.1.0 Innovation压测

文章目录 前言&#x1f4e3; 1.前言概述&#x1f4e3; 2.云服务器性能监控&#x1f4e3; 3.MySQL8.1版本安装✨ 3.1 安装包下载✨ 3.2 解压安装包✨ 3.3 登录验证 &#x1f4e3; 4.ubuntu安装sysbench&#x1f4e3; 5.云服务器压测✨ 5.1 IO测试✨ 5.2 CPU性能测试 &#x1f4e…

React18+Ts项目配置husky、eslint、pretttier、commitLint

前言 我的项目版本如下&#xff1a; React&#xff1a; V18.2.0Node.js: V16.14.0TypeScript&#xff1a;最新版工具&#xff1a; VsCode 本文将采用图文详解的方式&#xff0c;手把手带你快速完成在React项目中配置husky、prettier、commitLint&#xff0c;实现编码规范的统…

Javaweb作业小结

简单的XML文档 用JS求连乘积 function product(N) { let p 1; for (let i 1; i < N; i) { p * 2 * i - 1; } return p; } // 调用函数并输出结果 const N 7; // 这里的 N 是你想要的奇数的个数 const result product(N); console.log(p ${result}); Servlet映射关系…