数据结构:数据类型与抽象数据类型
数据类型与抽象数据类型
- 数据类型
- 基本数据类型
- 构造数据类型
- 指针类型
- 枚举类型
- 抽象数据类型(ADT)
- 抽象数据类型的组成部分
- 常见的抽象数据类型示例
- 数据类型与抽象数据类型的区别
- 实现抽象数据类型的具体方式
- 用数组实现栈
- 用链表实现栈
- 总结
数据类型
数据类型(Data Type)是编程语言中用于定义变量和常量所能存储数据的种类,以及能对这些数据进行的操作的集合。数据类型可以分为以下几类:
基本数据类型
- 整型(Integer):用于表示整数。例如,在C语言中,
int是一个整型数据类型。 - 浮点型(Floating Point):用于表示带有小数的数字。例如,
float和double是常见的浮点型数据类型。 - 字符型(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强调数据的逻辑结构和操作的规范,而不关心数据的存储和实现方式。
抽象数据类型的组成部分
- 数据对象:描述数据的逻辑结构。例如,一个队列的逻辑结构是一个有序的元素集合。
- 操作:定义了可以在数据对象上进行的操作。例如,对于队列,可以有入队(enqueue)、出队(dequeue)等操作。
常见的抽象数据类型示例
-
栈(Stack)
- 数据对象:有序的元素集合,遵循后进先出(LIFO, Last In First Out)原则。
- 操作:
push(item):将元素item压入栈顶。pop():移除并返回栈顶元素。peek():返回栈顶元素但不移除它。isEmpty():检查栈是否为空。
-
队列(Queue)
- 数据对象:有序的元素集合,遵循先进先出(FIFO, First In First Out)原则。
- 操作:
enqueue(item):将元素item添加到队列尾部。dequeue():移除并返回队列头部元素。front():返回队列头部元素但不移除它。isEmpty():检查队列是否为空。
-
列表(List)
- 数据对象:有序的元素集合,可以是线性表。
- 操作:
insert(position, item):在指定位置插入元素item。remove(position):移除指定位置的元素。get(position):返回指定位置的元素。size():返回列表的大小。isEmpty():检查列表是否为空。
数据类型与抽象数据类型的区别
-
数据类型:
- 具体的实现:数据类型是编程语言中具体定义的,它包括数据的存储方式和操作。例如,
int类型在C语言中表示一个整型变量,可以进行加减乘除等操作。 - 实现层次:数据类型是语言的基础部分,直接操作内存。
- 具体的实现:数据类型是编程语言中具体定义的,它包括数据的存储方式和操作。例如,
-
抽象数据类型:
- 抽象的概念:抽象数据类型是对数据及其操作的抽象描述,不关心具体的实现细节。例如,栈的抽象数据类型定义了栈的操作(
push、pop等)但不规定栈的具体实现方式,可以用数组实现,也可以用链表实现。 - 抽象层次:抽象数据类型提供了一种从逻辑上组织和操作数据的方式,提高了代码的可读性和可维护性。
- 抽象的概念:抽象数据类型是对数据及其操作的抽象描述,不关心具体的实现细节。例如,栈的抽象数据类型定义了栈的操作(
实现抽象数据类型的具体方式
不同的抽象数据类型可以有多种实现方式。例如,栈可以通过数组或链表来实现:
用数组实现栈
//以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) 是对数据结构及其操作的抽象描述,强调数据的逻辑结构和操作的规范。
- 数据类型关注数据的存储和操作方式,而抽象数据类型关注数据的功能和行为。
- 抽象数据类型可以有多种具体实现方式,具体实现方式可以选择最适合的存储结构和操作方法。
相关文章:
数据结构:数据类型与抽象数据类型
数据类型与抽象数据类型 数据类型基本数据类型构造数据类型指针类型枚举类型 抽象数据类型(ADT)抽象数据类型的组成部分常见的抽象数据类型示例 数据类型与抽象数据类型的区别实现抽象数据类型的具体方式用数组实现栈用链表实现栈 总结 数据类型 数据类…...
西方逻辑史简介
西方逻辑史研究,对形式逻辑实现现代化,对加强西方哲学史研究,对开展科学方法论的研究都有重要意义。西方逻辑史一般被划分成古代、中世纪、现代三个历史时期。本文拟对这三个时期中的七个重要逻辑学家和逻辑学派:亚里士多德、斯多…...
【论文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论文:[PDF] Sequential Minimal Optimization : A Fast Algorithm for Training Support Vector Machines | Semantic Scholar 算法优化:[PDF] Improvements to Platts SMO Algorithm for SVM Classifier Design | Semantic Scholar 包含个人plat…...
2.3 openCv -- 对矩阵执行掩码操作
在矩阵上进行掩模操作相当简单。其基本思想是根据一个掩模矩阵(也称为核)来重新计算图像中每个像素的值。这个掩模矩阵包含的值决定了邻近像素(以及当前像素本身)对新的像素值产生多少影响。从数学角度来看,我们使用指定的值来做一个加权平均。 具体而言,掩模操作通常涉…...
【Django】 js实现动态赋值、显示show隐藏hide效果
文章目录 需要达到的前端效果预览:实现步骤复制bootstrp代码(buttons)复制bootstrp代码(Alert警告框)写js测试效果 需要达到的前端效果预览: {% load static %} <!DOCTYPE html> <html lang"…...
qt--做一个拷贝文件器
一、项目要求 使用线程完善文件拷贝器的操作 主窗口不能假死主窗口进度条必须能动改写文件大小的单位(自适应) 1TB1024GB 1GB1024MB 1MB1024KB 1KB1024字节 二、所需技术 1.QFileDialog 文件对话框 QFileDialog也继承了QDialog类,直接使用静态…...
Eclipse 搭建 C/C++ 开发环境以及eclipse的使用
一、下载、安装 MinGW 1、下载: 下载地址:MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.net 点击“Download Latest Version”即可 下载完成后,得到一个名为 mingw-get-setup.exe 的安装文件。双击运行,安装即可。 …...
【初阶数据结构】复杂度算法题篇
旋转数组 力扣原题 方案一 循环K次将数组所有元素向后移动⼀位(代码不通过) 时间复杂度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.在编辑器里面打开项目,导入源码 (1)找到项目的地址C:\Users\zzz\IdeaProjects\datasys,然后右击用idea编辑器打开。 (2)idea中上菜单栏打开open,然后输入file,选择源代码文件 2.…...
若依 ruoyi poi Excel合并行的导入
本文仅针对文字相关的合并做了处理 ,图片合并及保存需要另做处理!! 目标:Excel合并行内容的导入 结果: 1. ExcelUtil.java 类,新增方法:判断是否是合并行 /*** 新增 合并行相关代码:…...
优化算法:1.遗传算法(GA)及Python实现
一、定义 遗传算法就像是在模拟“优胜劣汰”的进化过程,通过选择最优秀的个体,交配产生下一代,并引入一定的变异,逐步优化解决问题。 二、具体步骤 初始化种群(Initialization): 假设你要找到一个迷宫的最佳出口路径。…...
企业化运维(8)Docker容器技术
###1.Docker介绍### 什么是Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间…...
Unity C#底层原理(二)
委托 方法的容器:委托可以存储一个或多个方法的引用。可以使用委托对象来调用这些方法。函数/方法的变量类型:委托类型可以像变量一样声明和使用,存储方法的引用。存储、传递方法:委托可以作为参数传递给方法,也可以作…...
计算机网络-配置路由器ACL(访问控制列表)
配置访问控制列表ACL 拓扑结构 拓扑结构如下: 要配置一个ACL,禁止PC0访问PC3,禁止PC4访问PC0,其它正常。 配置Router0 配置接口IP地址: 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 工作原理:2.3 使用方法: 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 注意:在onStartDiscoveryFailed 和 onStopDiscoveryFailed里不要调用nsdManager.stopServiceDiscovery(this) 方法࿰…...
ChatGPT建议前端学习计划
HTML&CSS基础 - 学习HTML标签、CSS属性、页面布局等基础知识 JavaScript基础 - 学习变量、数据类型、控制流、函数等基础知识 jQuery - 学习如何使用jQuery处理文档对象模型(DOM)、事件、动画等 Ajax - 全称为 Asynchronous JavaScript and XML&…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
vue3 daterange正则踩坑
<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...
PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...
