当前位置: 首页 > news >正文

数据结构:数据类型与抽象数据类型

数据类型与抽象数据类型

  • 数据类型
    • 基本数据类型
    • 构造数据类型
    • 指针类型
    • 枚举类型
  • 抽象数据类型(ADT)
    • 抽象数据类型的组成部分
    • 常见的抽象数据类型示例
  • 数据类型与抽象数据类型的区别
  • 实现抽象数据类型的具体方式
    • 用数组实现栈
    • 用链表实现栈
  • 总结

数据类型

数据类型(Data Type)是编程语言中用于定义变量和常量所能存储数据的种类,以及能对这些数据进行的操作的集合。数据类型可以分为以下几类:

基本数据类型

  • 整型(Integer):用于表示整数。例如,在C语言中,int是一个整型数据类型。
  • 浮点型(Floating Point):用于表示带有小数的数字。例如,floatdouble是常见的浮点型数据类型。
  • 字符型(Character):用于表示单个字符。在C语言中,char用于表示字符。
  • 布尔型(Boolean):用于表示真或假。在C语言中,通常使用int来表示布尔值(0表示假,非0表示真),但在现代编程语言中,有专门的bool类型。

构造数据类型

  • 数组(Array):用于表示相同数据类型的有序集合。数组的大小是固定的,可以通过索引来访问其元素。
    //以C为例
    int arr[5] = {1, 2, 3, 4, 5};
    
  • 结构体(Structure):用于组合不同数据类型的变量,形成一种新的数据类型。
    //以C为例
    struct Student {char name[50];int age;float gpa;
    };
    
  • 联合体(Union):与结构体类似,但它的所有成员共享同一块内存,因此任何时候只能有一个成员有效。
    //以C为例
    union Data {int i;float f;char str[20];
    };
    

指针类型

  • 指针(Pointer):用于存储内存地址,可以指向任何数据类型的变量。
    //以C为例
    int a = 10;
    int *p = &a; // p是一个指向整数的指针
    

枚举类型

  • 枚举(Enumeration):定义一组命名的整数常量。
    //以C为例
    enum Color { RED, GREEN, BLUE };
    

抽象数据类型(ADT)

抽象数据类型(Abstract Data Type, ADT) 是一个更高层次的抽象,它定义了一种数据及其相关操作,而不涉及其具体实现。ADT强调数据的逻辑结构和操作的规范,而不关心数据的存储和实现方式。

抽象数据类型的组成部分

  1. 数据对象:描述数据的逻辑结构。例如,一个队列的逻辑结构是一个有序的元素集合。
  2. 操作:定义了可以在数据对象上进行的操作。例如,对于队列,可以有入队(enqueue)、出队(dequeue)等操作。

常见的抽象数据类型示例

  1. 栈(Stack)

    • 数据对象:有序的元素集合,遵循后进先出(LIFO, Last In First Out)原则。
    • 操作
      • push(item):将元素item压入栈顶。
      • pop():移除并返回栈顶元素。
      • peek():返回栈顶元素但不移除它。
      • isEmpty():检查栈是否为空。
  2. 队列(Queue)

    • 数据对象:有序的元素集合,遵循先进先出(FIFO, First In First Out)原则。
    • 操作
      • enqueue(item):将元素item添加到队列尾部。
      • dequeue():移除并返回队列头部元素。
      • front():返回队列头部元素但不移除它。
      • isEmpty():检查队列是否为空。
  3. 列表(List)

    • 数据对象:有序的元素集合,可以是线性表。
    • 操作
      • insert(position, item):在指定位置插入元素item
      • remove(position):移除指定位置的元素。
      • get(position):返回指定位置的元素。
      • size():返回列表的大小。
      • isEmpty():检查列表是否为空。

数据类型与抽象数据类型的区别

  • 数据类型

    • 具体的实现:数据类型是编程语言中具体定义的,它包括数据的存储方式和操作。例如,int类型在C语言中表示一个整型变量,可以进行加减乘除等操作。
    • 实现层次:数据类型是语言的基础部分,直接操作内存。
  • 抽象数据类型

    • 抽象的概念:抽象数据类型是对数据及其操作的抽象描述,不关心具体的实现细节。例如,栈的抽象数据类型定义了栈的操作(pushpop等)但不规定栈的具体实现方式,可以用数组实现,也可以用链表实现。
    • 抽象层次:抽象数据类型提供了一种从逻辑上组织和操作数据的方式,提高了代码的可读性和可维护性。

实现抽象数据类型的具体方式

不同的抽象数据类型可以有多种实现方式。例如,栈可以通过数组或链表来实现:

用数组实现栈

//以C为例
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;void push(int item) {if (top < MAX_SIZE - 1) {stack[++top] = item;} else {printf("Stack Overflow\n");}
}int pop() {if (top >= 0) {return stack[top--];} else {printf("Stack Underflow\n");return -1;}
}

用链表实现栈

//以C为例
struct Node {int data;struct Node* next;
};struct Node* top = NULL;void push(int item) {struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));newNode->data = item;newNode->next = top;top = newNode;
}int pop() {if (top != NULL) {int item = top->data;struct Node* temp = top;top = top->next;free(temp);return item;} else {printf("Stack Underflow\n");return -1;}
}

总结

  • 数据类型是具体的编程语言定义的数据及其操作。
  • 抽象数据类型(ADT) 是对数据结构及其操作的抽象描述,强调数据的逻辑结构和操作的规范。
  • 数据类型关注数据的存储和操作方式,而抽象数据类型关注数据的功能和行为。
  • 抽象数据类型可以有多种具体实现方式,具体实现方式可以选择最适合的存储结构和操作方法。

相关文章:

数据结构:数据类型与抽象数据类型

数据类型与抽象数据类型 数据类型基本数据类型构造数据类型指针类型枚举类型 抽象数据类型&#xff08;ADT&#xff09;抽象数据类型的组成部分常见的抽象数据类型示例 数据类型与抽象数据类型的区别实现抽象数据类型的具体方式用数组实现栈用链表实现栈 总结 数据类型 数据类…...

西方逻辑史简介

西方逻辑史研究&#xff0c;对形式逻辑实现现代化&#xff0c;对加强西方哲学史研究&#xff0c;对开展科学方法论的研究都有重要意义。西方逻辑史一般被划分成古代、中世纪、现代三个历史时期。本文拟对这三个时期中的七个重要逻辑学家和逻辑学派&#xff1a;亚里士多德、斯多…...

【论文10】复现代码tips

一、准备工作 1.创建一个虚拟环境 conda create --name drgcnn38 python=3.8.18 2.激活虚拟环境 conda activate drgcnn38 注意事项 在Pycharm中终端(terminal)显示PS而不是虚拟环境base 问题如下所示 解决方法:shell路径改成cmd.exe 重启终端显示虚拟环境 3.安装torch …...

分布式缓存获取以及设置

1. 通用代码 public SysUser getCache(String sysUserId) {String cacheKey "litgery:warehouse:" sysUserId;// 尝试从缓存中获取数据CacheData cacheData redisUtils.get(cacheKey);if (null ! cacheData) {if (Boolean.TRUE.equals(cacheData.getExist())) {re…...

SMO算法,platt论文的原始算法及优化算法

platt论文&#xff1a;[PDF] Sequential Minimal Optimization : A Fast Algorithm for Training Support Vector Machines | Semantic Scholar 算法优化&#xff1a;[PDF] Improvements to Platts SMO Algorithm for SVM Classifier Design | Semantic Scholar 包含个人plat…...

2.3 openCv -- 对矩阵执行掩码操作

在矩阵上进行掩模操作相当简单。其基本思想是根据一个掩模矩阵(也称为核)来重新计算图像中每个像素的值。这个掩模矩阵包含的值决定了邻近像素(以及当前像素本身)对新的像素值产生多少影响。从数学角度来看,我们使用指定的值来做一个加权平均。 具体而言,掩模操作通常涉…...

【Django】 js实现动态赋值、显示show隐藏hide效果

文章目录 需要达到的前端效果预览&#xff1a;实现步骤复制bootstrp代码&#xff08;buttons&#xff09;复制bootstrp代码&#xff08;Alert警告框&#xff09;写js测试效果 需要达到的前端效果预览&#xff1a; {% load static %} <!DOCTYPE html> <html lang"…...

qt--做一个拷贝文件器

一、项目要求 使用线程完善文件拷贝器的操作 主窗口不能假死主窗口进度条必须能动改写文件大小的单位&#xff08;自适应&#xff09; 1TB1024GB 1GB1024MB 1MB1024KB 1KB1024字节 二、所需技术 1.QFileDialog 文件对话框 QFileDialog也继承了QDialog类&#xff0c;直接使用静态…...

Eclipse 搭建 C/C++ 开发环境以及eclipse的使用

一、下载、安装 MinGW 1、下载: 下载地址&#xff1a;MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.net 点击“Download Latest Version”即可 下载完成后&#xff0c;得到一个名为 mingw-get-setup.exe 的安装文件。双击运行&#xff0c;安装即可。 …...

【初阶数据结构】复杂度算法题篇

旋转数组 力扣原题 方案一 循环K次将数组所有元素向后移动⼀位&#xff08;代码不通过) 时间复杂度O(n2) 空间复杂度O(1) void rotate(int* nums, int numsSize, int k) {while (k--) {int end nums[numsSize - 1];for (int i numsSize - 1; i > 0; i--) {nums[i] num…...

20240725项目的maven环境报红-重新配置maven

1.在编辑器里面打开项目&#xff0c;导入源码 &#xff08;1&#xff09;找到项目的地址C:\Users\zzz\IdeaProjects\datasys&#xff0c;然后右击用idea编辑器打开。 &#xff08;2&#xff09;idea中上菜单栏打开open&#xff0c;然后输入file&#xff0c;选择源代码文件 2.…...

若依 ruoyi poi Excel合并行的导入

本文仅针对文字相关的合并做了处理 &#xff0c;图片合并及保存需要另做处理&#xff01;&#xff01; 目标&#xff1a;Excel合并行内容的导入 结果&#xff1a; 1. ExcelUtil.java 类&#xff0c;新增方法&#xff1a;判断是否是合并行 /*** 新增 合并行相关代码&#xff1a;…...

优化算法:1.遗传算法(GA)及Python实现

一、定义 遗传算法就像是在模拟“优胜劣汰”的进化过程&#xff0c;通过选择最优秀的个体&#xff0c;交配产生下一代&#xff0c;并引入一定的变异&#xff0c;逐步优化解决问题。 二、具体步骤 初始化种群(Initialization)&#xff1a; 假设你要找到一个迷宫的最佳出口路径。…...

企业化运维(8)Docker容器技术

###1.Docker介绍### 什么是Docker Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间…...

Unity C#底层原理(二)

委托 方法的容器&#xff1a;委托可以存储一个或多个方法的引用。可以使用委托对象来调用这些方法。函数/方法的变量类型&#xff1a;委托类型可以像变量一样声明和使用&#xff0c;存储方法的引用。存储、传递方法&#xff1a;委托可以作为参数传递给方法&#xff0c;也可以作…...

计算机网络-配置路由器ACL(访问控制列表)

配置访问控制列表ACL 拓扑结构 拓扑结构如下&#xff1a; 要配置一个ACL&#xff0c;禁止PC0访问PC3&#xff0c;禁止PC4访问PC0&#xff0c;其它正常。 配置Router0 配置接口IP地址&#xff1a; interface fastethernet 0/0 ip address 192.168.1.1 255.255.255.0 no shu…...

51单片机嵌入式开发:20、STC89C52R基于C51嵌入式点阵广告屏的设计

STC89C52R基于C51嵌入式点阵广告屏的设计 1 概述2 LED点阵介绍2.1 特点和优势2.2 工作原理&#xff1a;2.3 使用方法&#xff1a; 3 LED点阵原理3.1 Led点阵内部电路3.2 原理图电路3.3 74HC595 4 软件实现点阵图案的滑动4.1 软件工程代码4.2 Protues仿真 5 总结 配套示例程序 1…...

VLC输出NDI媒体流

目录 1. 下载安装VLC Play 2. 首先在电脑上安装NDI Tools 3. 运行VLC进行输出配置 4. 播放视频 5. 验证 (1)用Studio Monitor验证 (2)用OBS验证 NDI(Network Device Interface)即网络设备接口,是由美国 NewTek 公司开发的免费标准,它可使兼容的视频产品以高质量…...

WiFi 局域网通信 - 发现服务和解析

1. nsdManager nsdManager requireContext().getSystemService(Context.NSD_SERVICE) as NsdManager2. NsdManager.DiscoveryListener 注意&#xff1a;在onStartDiscoveryFailed 和 onStopDiscoveryFailed里不要调用nsdManager.stopServiceDiscovery(this) 方法&#xff0…...

ChatGPT建议前端学习计划

HTML&CSS基础 - 学习HTML标签、CSS属性、页面布局等基础知识 JavaScript基础 - 学习变量、数据类型、控制流、函数等基础知识 jQuery - 学习如何使用jQuery处理文档对象模型&#xff08;DOM&#xff09;、事件、动画等 Ajax - 全称为 Asynchronous JavaScript and XML&…...

IT6500电源蜂鸣器太吵?教你用Python远程静音并实现电压步进扫描

IT6500电源蜂鸣器静音与电压步进扫描的Python实战指南 深夜的实验室里&#xff0c;IT6500电源的蜂鸣器突然响起&#xff0c;刺耳的"哔哔"声打破了宁静&#xff0c;这种场景对于电子工程师来说再熟悉不过。本文将带你用Python彻底解决这个恼人的问题&#xff0c;同时实…...

OWL ADVENTURE Java面试题实战:手写一个简单的图像加载器

OWL ADVENTURE Java面试题实战&#xff1a;手写一个简单的图像加载器 最近在准备Java面试的朋友&#xff0c;是不是经常被问到IO、多线程这些基础&#xff1f;光背八股文总觉得心里没底。今天咱们换个玩法&#xff0c;不搞虚的&#xff0c;直接动手写一个能用在真实项目里的东…...

YOLO12在工业质检场景:PCB缺陷识别与小目标检测实战案例

YOLO12在工业质检场景&#xff1a;PCB缺陷识别与小目标检测实战案例 1. 引言&#xff1a;当AI质检员遇上电路板 想象一下&#xff0c;你是一家电子厂的质检主管。每天&#xff0c;成千上万块印刷电路板&#xff08;PCB&#xff09;从生产线上下来&#xff0c;每一块都需要经过…...

手把手教你用Swaks和Gophish绕过SPF,搭建自己的邮件钓鱼测试环境(附避坑指南)

企业级邮件安全测试实战&#xff1a;从SPF绕过到钓鱼环境搭建 邮件安全测试已成为企业安全防护体系中不可或缺的一环。据统计&#xff0c;超过90%的网络攻击始于钓鱼邮件&#xff0c;而其中近40%的成功攻击源于SPF配置不当或完全缺失。本文将系统性地介绍如何构建一个完整的邮件…...

Nuitka打包Python脚本为.exe的完整避坑指南(含Selenium解决方案)

Nuitka打包Python脚本为.exe的完整避坑指南&#xff08;含Selenium解决方案&#xff09; 将Python脚本打包成独立的可执行文件是许多开发者面临的常见需求&#xff0c;尤其是当需要分发工具或应用给没有Python环境的用户时。Nuitka作为一款强大的Python编译器&#xff0c;能够将…...

【Python 3.15 JIT终极指南】:20年CPython核心开发者亲授,从零部署到性能翻倍的5个关键跃迁

第一章&#xff1a;Python 3.15 JIT的诞生背景与核心设计哲学 Python 长期以来以开发效率和生态丰富性见长&#xff0c;但其解释执行模型在 CPU 密集型场景下始终面临性能瓶颈。CPython 的字节码解释器虽稳定可靠&#xff0c;却缺乏运行时优化能力&#xff1b;而第三方方案&…...

保姆级教程:用Docker Compose一键部署带汉化和HTTPS的n8n,并配置反向代理(Nginx)

企业级n8n自动化平台全栈部署实战&#xff1a;从容器编排到安全加固 在数字化转型浪潮中&#xff0c;自动化工作流平台已成为企业降本增效的核心基础设施。n8n作为GitHub上增长最快的开源自动化工具之一&#xff0c;凭借其可视化编排能力和400节点生态&#xff0c;正在重塑企业…...

17 种 RAG 优化策略

RAG 完整解析 本文适合小白入门&#xff0c;全程用「公司员工手册查病假」为统一实例&#xff0c;清晰讲解 RAG 是什么、工作流程&#xff0c;以及 17 种 RAG 优化策略&#xff08;含标准英文术语&#xff09;&#xff0c;所有内容可直接复制用于分享&#xff0c;实例均精确到具…...

大模型进阶:掌握Function Calling和MCP,解锁AI生产力(收藏版)

本文深入探讨了Function Calling技术如何帮助大模型获取实时信息、执行任务&#xff0c;以及MCP协议在大模型与外部交互中的关键作用。文章阐述了从提示工程到RAG&#xff0c;再到Function Calling和MCP的技术演进路径&#xff0c;强调了这些技术如何使大模型从信息工具转变为生…...

2026 工程指南:为什么 AWS Bedrock + Claude 4.6 正在成为多 Agent 协作的底层首选?

进入 2026 年第一季度&#xff0c;大模型领域的竞争已经从“单纯的参数规模”转向了“端到端的工程效率”。随着 GPT-5.4 陷入推理成本高企的泥潭&#xff0c;Anthropic 联手亚马逊发布的 Claude 4.6 托管方案&#xff0c;正在通过 Amazon Bedrock 平台迅速收割企业级市场。作为…...