【C语言版】数据结构教程(一)绪论(上)
【内容简介】本文整理数据结构(C语言版)相关内容的复习笔记,供各位朋友借鉴学习。本章内容更偏于记忆和理解,请读者们耐心阅读。
数据结构教程 · 绪论(上)
本节学习目标
1.1 基本概念
1.2 抽象数据类型的表示与实现
本节学习目标
- 熟悉数据结构相关的一些概念和术语
- 了解如何书写抽象数据类型的形式定义
1.1 基本概念
下面我们简要介绍一下数据结构相关的一些概念和术语,这在之后的学习过程中都经常会用到。
1、数据(data)是所有能输入到计算机中并被计算机程序处理的符号的总称。例如:声音、图像、字符串等等。
2、数据元素(data system)是数据的基本单位。例如:下面这张“图”中由许多圆圈组成,这些圆圈就可以认为是数据元素。
3、数据项(data item)是组成数据元素的单位,也是数据的不可分割的最小单位。例如:书籍的目录对于这本书而言是一个数据元素,目录中每一章的信息(章名、页码等)就是一个数据项。
4、数据对象(data object)是性质相同的数据元素的集合,是数据的一个子集。例如:整数数据对象是集合 N = {0,1,-1,2,-2,···}。
以上是数据的一些详细概念。而我们着重要学习的数据结构(data structure)是相互之间存在一种或多种特定关系的数据元素的集合。数据元素之间的关系称为结构(structure)。一般而言,数据元素之间存在以下 4 种基本结构:
- 集合:结构中的数据元素之间除了“同属于一个集合”之外,没有其它关系。
- 线性结构:结构中的数据元素之间存在一个对一个的关系。
- 树形结构:结构中的数据元素之间存在一个对多个的关系。
- 图状结构或网状结构:结构中的数据元素之间存在多个对多个的关系。
数据的定义方式并不唯一,除上述之外,还有一种形式定义:数据结构是一个二元组,
Data_Structure = { D,S }
其中:D 是数据元素的有限集,S是D上存在的关系的有限集。这样的说法比较抽象,我们举个例子:
【例1】现在我们需要编写一个公司职工管理系统,那么我们首先需要构思这个系统中的数据结构。假设这个公司有 1 个董事长,1 个总经理和 3 个员工,那么这个公司的职工之间存在的关系是:董事长管理总经理,总经理管理员工。则可以定义如下的数据结构:
Group = ( P,R )
其中:P 包含这个公司的所有职员,
R = { R1,R2 },
R1 = { <董事长,总经理> },
R2 = { <总经理,员工1>,<总经理,员工2>,<总经理,员工3> }。
上述定义仅仅只是一种从对象的角度抽象出来的数学模型。结构定义中的“关系”描述为数据元素之间的逻辑关系,因此又称为数据的逻辑结构。
但是,为了在计算机中实现对其的操作,还需要研究在计算机中如何来表示一个数据结构。数据结构在计算机中的表示称为数据的物理结构,又称为存储结构。它包括数据元素的表示以及关系的表示。在计算机中,表示信息的最小单位是二进制数的一位,叫做位(bit)。由若干个位组成的位串表示一个数据元素,通常称为元素或结点,例如:用 8 位二进制数表示一个字符。
数据元素之间的关系在计算机中有两种不同的表示方法:顺序映像和非顺序映像,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。
顺序映像的特点是,借助元素在存储器中的相对位置来表示逻辑关系,例如:假设用 2 个字长的位串表示一个实数,则相邻 4 个字长的位串可以表示一个复数。而对于非顺序映像而言,通常通过指针来指示元素存储地址,从而将数据元素之间的逻辑关系表示出来。如下图所示:
而存储结构可以分别用“一维数组”来描述顺序存储结构,用“指针”描述链式存储结构。
数据类型(data type)是和数据结构密切相关的一个概念。它包括了一个值的集合和定义在这个值集上的一组操作的总称。例如:C语言中的整型变量,其值集为某个区间上的整数,定义在上面的操作为加、减、乘、除和取模等算术运算。根据“值”的不同,数据类型可分为两类:一类是不可分解的原子类型,例如:实数;一类是由若干成分按某种结构组成,可以分解的结构类型,例如:数组。
1.2 抽象数据类型的表示与实现
抽象数据类型(abstract data type,简称 ADT)是指一个数学模型以及定义在该模型上的一组操作。也就是说,只要这个数据类型的逻辑特性不发生变化,就不影响它在外部的使用,类似我们常说的“面向对象的设计”原则。
一个含抽象数据类型的软件模块通常应包含定义、表示和实现 3 个部分。由于抽象数据类型的定义由一个值域和定义在该值域上的一组操作组成。按照其值的不同特性,可以分为:原子类型、固定聚合类型、可变聚合类型。后两者分别代表组成值的成分数量一定或是可变。
与数据结构的形式定义类似,抽象数据类型可用以下三元组表示:( D,S,P )。其中,D 是数据对象,S 是 D 上的关系集,P 是对 D 的基本操作集。具体来书写可以如下:
ADT 抽象数据类型名 {数据对象:<数据对象的定义>数据关系:<数据关系的定义>基本操作:<基本操作的定义>
} ADT 抽象数据类型名
其中,数据对象和数据关系的定义用伪码描述,基本操作的定义格式为:
基本操作名(参数表)初始条件:<初始条件描述>操作结果:<操作结果描述>
基本操作有两种参数:赋值参数只为操作提供输入值;引用参数以 & 打头,除了提供输入值以外,还将返回操作结果。
【例2】一个抽象数据类型三元组的定义:
ADT Triplet {
数据对象:D = {e1, e2, e3 | e1, e2, e3 属于这个集合}
数据关系:R1 = {<e1, e2> , <e2, e3>}
基本操作:
InitTriplet (&T, v1, v2, v3)
操作结果:构造三元组 T,元素 e1, e2, e3 分别被赋以参数 v1, v2,v3的值。
DestroyTriplet (&T)
操作结果:三元组 T 被销毁。
Get (T, i , &e)
初始条件:三元组 T 已存在,i = 1,2,3。
操作结果:用 e 返回 T 中第 i 个元素的值。
...
} ADT Triplet
继续阅读下一篇(点击跳转):【C语言版】数据结构教程(一)绪论(下)
相关文章:
【C语言版】数据结构教程(一)绪论(上)
【内容简介】本文整理数据结构(C语言版)相关内容的复习笔记,供各位朋友借鉴学习。本章内容更偏于记忆和理解,请读者们耐心阅读。 数据结构教程 绪论(上) 本节学习目标 1.1 基本概念 1.2 抽象数据类型的表示…...
酒后为什么总感觉渴?
喝酒后感到口渴,这种感觉其实很常见。这主要是因为酒精对我们的身体有几种影响。首先,酒精能够扩张血管,这会加快血液循环,让肾脏更加活跃,产生更多的尿液。这样一来,我们体内的水分就会通过排尿流失&#…...
Docker安装OwnCloud私有云盘对接ceph
一、安装OwnCloud 我的安装包链接:https://pan.baidu.com/s/1cJO8WEonsw4gGQWgQaYzpw?pwd6bak 提取码:6bak 启动OwnCloud容器,没有镜像会自动下载 docker run -d -p 80:80 -v /home/owncloud:/var/www/html --name owncloud --restartalway…...
创建了Vue项目,需要导入什么插件以及怎么导入
如果你不知道怎么创建Vue项目,建议可以看一看这篇文章 怎么安装Vue的环境和搭建Vue的项目-CSDN博客 1.在idea中打开目标文件 2.系在一个插件Vue.js 3.下载ELement UI 在Terminal中输入 # 切换到项目根目录 cd vueadmin-vue # 或者直接在idea中执行下面命令 # 安装element-u…...
abstract 关键字
在C#中,abstract 关键字是一个非常重要的特性,它用于定义抽象类和抽象成员(如方法、属性、索引器、事件或操作符)。使用 abstract 关键字的目的主要是为了提供一种机制,让基类能够指定一个或多个必须由派生类实现的方法…...
用Python编写你的网络监控系统详解
概要 在现代网络管理中,实时监控网络流量和状态是保证网络正常运行的关键。使用Python编写网络监控工具可以帮助管理员及时发现和解决网络问题。本文将详细介绍如何使用Python编写网络监控工具,包括基本概念、常用库及其应用场景,并提供相应的示例代码。 网络监控的基本概念…...
操作系统——虚拟内存
一、虚拟内存是什么? 虚拟内存类似一个桥梁,原来程序直接访问物理内存读取数据,现在程序直接访问虚拟内存,由虚拟内存再访问物理内存。 使用虚拟内存的好处: 隔离进程、提高内存使用安全性:每个进程直接…...
Zoom视频会议软件使用
Zoom 是一款广泛使用的视频会议软件,可以用于在线会议、网络研讨会、课堂教学、团队协作等。以下是使用 Zoom 的基本步骤和一些有用的技巧: 安装 Zoom 下载并安装: 访问 Zoom 下载页面。下载适用于你的操作系统(Windows, macOS, Linux, iOS, Android)的客户端。安装完成后…...
MVC软件设计模式及QT的MVC架构
目录 引言 一、MVC思想介绍 1.1 MCV模型概述 1.2 Excel的处理数据 1.3 MVC模式的优势 二、QT中的MVC 1.1 模型(Model) 1. QAbstractItemModel 2. QStringListModel 3. QStandardItemModel 4. QSqlTableModel 和 QSqlQueryModel 5. QAbstract…...
使用WSL通过SSH连接并运行图形界面程序
使用WSL通过SSH连接并运行图形界面程序 1. 在Windows上安装X服务器2. 配置并启动VcXsrv3. 在WSL Ubuntu中设置DISPLAY变量4. 从WSL Ubuntu连接到远程服务器5. 在远程服务器上设置DISPLAY变量6. 测试X11转发7. 运行您的安装程序注意事项 在Windows Subsystem for Linux (WSL) 上…...
柳湛宇-简历
...
6-1 从全连接层到卷积
我们之前讨论的多层感知机十分适合处理表格数据,其中行对应样本,列对应特征。 对于表格数据,我们寻找的模式可能涉及特征之间的交互,但是我们不能预先假设任何与特征交互相关的先验结构。 此时,多层感知机可能是最好的…...
【Android Studio】项目目录结构
文章目录 常用视图Android视图project视图 gradlebuild.gradleSDK 路径主题入口程序 常用视图 Android视图 project视图 gradle build.gradle SDK 路径 主题 入口程序...
electron-builder打包vue2项目问题合集
一、打包之后不显示elecmentui的图标 1、使用版本 vue ^2.6.14element-ui ^2.15.14vue-cli-plugin-electron-builder 2.1.1 2、解决办法 1) 如果是简单的图标可以使用图片代替(这种对于elementui组件的图标还是不会显示) 2)在v…...
5行代码快速Git配置ssh
0 流程步骤 检查本地主机是否已经存在ssh key生成ssh key获取ssh key公钥内容(id_rsa.pub)复制该内容,到Github账号上添加公钥,进入Settings设置验证是否设置成功 1 代码 # 1.检查本地主机是否已经存在ssh key cd ~/.ssh ls # …...
气相色谱检测常见问题和实战案例分享-测试狗
气相色谱检测常见问题和实战案例分享 气相色谱GC是一种高效、灵敏的分离和分析技术,广泛应用于石油化工、环境保护、食品安全、药物分析等领域;在使用气相色谱进行检测时,可能会遇到一些常见问题,本文将分享一些实战案例ÿ…...
一文学会CUDA编程:深入了解CUDA编程与架构(一)
前言: CUDA(Compute Unified Device Architecture,统一计算设备架构)是由NVIDIA公司开发的一种并行计算平台和编程模型。CUDA于2006年发布,旨在通过图形处理器(GPU)解决复杂的计算问题。在早期…...
Jquery判断图片加载失败,显示默认图片
//加载图片 出现404状态时触发 $(img).error(function () { //将加载不到的图片的src属性时,修改成默认图片,注意:默认图片必须保证存在,否则会一直调用此函数,造成死循环。$(this).attr("src", "Imag…...
App 自动化测试调研
App 自动化测试调研 App 自动化测试的价值 App 自动化测试在软件开发过程中扮演着重要的角色,具有以下几个方面的价值: 1.提高测试效率和覆盖率:自动化测试可以执行大量的测试用例,覆盖各种功能和场景,相比手动测试…...
Java 后端已经过时的技术,也是我逝去的青春
最近这段时间收到了一些读者的私信,问我某个技术要不要学,还有一些的同学竟然对 Java 图形化很感兴趣,还想找这方面的工作。 我接触 Java 已近 10多年了,见证了许多 Java 技术变迁,包括: JavaEE 框架&…...
释放自动化测试潜能:性能优化策略与实战技巧!
引言 在当今追求软件快速迭代的环境下,自动化测试的性能瓶颈正成为制约开发流程加速的主要障碍。本文将深入探讨如何通过策略和实践,优化自动化测试的性能,实现测试执行速度的质的飞跃。 自动化性能瓶颈的识别与突破 首先,识别并…...
如何理解代码的跨平台?
跨平台性: 跨平台性意味着,在多个平台都兼容运行 那么是怎么做到跨平台? 一般来说,window的操作系统和Linux的操作系统肯定是不一样的 那么提供的系统调用接口和诸多细节也是不一样的 但是,我们的c语言和c语言…...
dp:221. 最大正方形
221. 最大正方形 看到这个题目真能立马想到dp吗?貌似很难,即使知道是一个dp题也很难想到解法。 直观来看,使用bfs以一个点为中点进行遍历,需要的时间复杂度为 O ( n 2 m 2 ) O(n^2m^2) O(n2m2) 但是可以很容易发现,…...
花10分钟写个漂亮的后端API接口模板!
你好,我是田哥 在这微服务架构盛行的黄金时段,加上越来越多的前后端分离,导致后端API接口规范变得越来越重要了。 比如:统一返回参数形式、统一返回码、统一异常处理、集成swagger等。 目的主要是规范后端项目代码,以及…...
评估分类机器学习模型的指标
欢迎来到雲闪世界。一旦我们训练了一个监督机器学习模型来解决分类问题,如果这就是我们工作的结束,我们会很高兴,我们可以直接向他们输入新数据。我们希望它能正确地对所有内容进行分类。然而,实际上,模型做出的预测并…...
农机自动化:现代农业的未来趋势
随着人口的增长和农业生产的需求不断增加,提高农业生产效率成为现代农业的重要目标。农机自动化作为一种新兴技术,可以大幅度提升农机的使用效率和生产能力。农机自动化是指利用先进的传感技术、数据处理和人工智能技术,使农机能够自动完成农…...
25考研操作系统复习·1.1/1.2/1.3 操作系统的基本概念/发展历程/运行环境
目录 操作系统的基本概念 概念(定义) 功能和目标 资源的管理者 向上层提供服务 给普通用户的 给软件/程序员的 对硬件机器的拓展 操作系统的特征 操作系统的发展历程 操作系统的运行环境 操作系统的运行机制 中断和异常 中断的作用 中断的…...
如何培养学生的创新意识和实践能力
培养学生的创新意识和实践能力是一个复杂而系统的过程,涉及多个方面的努力和措施。以下是一些具体的做法: 一、培养学生的创新意识 提供创新环境: 为学生创造一个开放、自由、支持创新的学习环境,让他们能够自由地表达自己的想法…...
四、GD32 MCU 常见外设介绍(15)CAN 模块介绍
CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 CAN总线协议已经成为汽车计算机控…...
AIGC大模型产品经理高频面试大揭秘‼️
近期有十几个学生在面试大模型产品经理(薪资还可以,详情见下图),根据他们面试(包括1-4面)中出现高频大于3次的问题汇总如下,一共32道题目(有答案)。 29.讲讲T5和Bart的区…...
禁止搜索引擎抓取wordpress的目录/怎么下载app到手机上
Graphviz是一个可以对图进行自动布局的绘图工具,由贝尔实验室开源。我们在上次 Python 快速绘制画出漂亮的系统架构图 提到的diagrams,其内部的编排逻辑就用到了这个开源工具包。而今天我们要介绍的项目,就是基于Python和Graphviz开发的&…...
租车网站建设/网站设计模板
题目:原题链接(中等) 标签:堆、排序 解法时间复杂度空间复杂度执行用时Ans 1 (Python)O(NlogN)O(NlogN)O(NlogN)O(N)O(N)O(N)680ms (89.37%)Ans 2 (Python)Ans 3 (Python) 解法一: import heapqclass Solution:def …...
建公司网站哪里好/网站seo主要是做什么的
小续这也是我11年看加密解密整理的一些笔记,因为后面有事,所以这个笔记并不完整,不过也涉及到很多知识了,写给爱好加密解密的朋友多字节数据是按怎样的顺序存放的呢?实际情况和CPU有关,微处理中的存放顺序有…...
极验验证 wordpress/中山排名推广
文章目录0x01 DLL简介0x02 DLL 调用0x03 与 lib 文件区别0x04 DLL 编写0x01 DLL简介 动态链接库(Dynamic-Link-Library,缩写dll), 是微软公司在微软视窗操作系统中实现共享函数库概念的一种实现方式。这些库函数的扩展名是 .DLL、.OCX&am…...
广州做网站seo/seo sem是指什么意思
Solr 是一种可供企业使用的、基于 Lucene 的搜索服务器,它支持层面搜索、命中醒目显示和多种输出格式。在这篇文章中,将介绍 Solr 并展示如何轻松地将其表现优异的全文本搜索功能加入到 Web 应用程序中。 开发环境: System:Window…...
网站建设柒首先金手指8/电商培训班一般多少钱一个月
11.3 继承中的多态 在子类中定义了和父类中同名的成员变量和方法,这就涉及成员的隐藏与重载。 成员的隐藏与重载属于多态特性的一种。 通过继承,子类拥有除构造方法以外的所有成员(变量及方法),这类成员统称为子类的继…...