数据结构--》数组和广义表:从基础到应用的全面剖析

news2024/12/24 3:21:24

        数据结构为我们提供了组织和处理数据的基本工具。而在这个广袤的数据结构领域中,数组和广义表是两个不可或缺的重要概念。它们作为线性结构的代表,在算法与应用中扮演着重要的角色。

        无论你是初学者还是进阶者,本文将为你提供简单易懂、实用可行的知识点,帮助你更好地掌握数组和广义表在数据结构和算法中的重要性,进而提升算法解题的能力。接下来让我们开启数据结构与算法的奇妙之旅吧。

目录

数组的定义

数组的顺序表示和实现

矩阵的压缩存储

广义表的定义

广义表的存储结构


数组的定义

数组是一组偶对(下标值,数据元素值)的集合。在数组中对于一组有意义的下标,都存在一个与其对应的值。一维数组对应着一个下标值,二维数组对应着两个下标值,如此类推。

数组是由n(n>1)个具有相同数据类型的数据元素 a_1,a_2,.....a_n 组成的有序序列,且该序列必须存储在一块地址连续的存储单元中。数组具有以下特点:

1)数组中的数据元素具有相同数据类型

2)数组是一种随机存取结构,给定一组下标,就可以访问与其对应的数据元素。

3)数组中的数据元素个数是固定的。

数组的抽象数据类型定义:

由上述定义知,n维数组中有b_1b_2....b_n个数据元素,每个数据元素都受到n维关系的约束

数组的顺序表示和实现

数组一般不做插入和删除操作,也就是说数组一旦建立,结构中的元素的个数和元素间的关系就不再发生变化。因此一般都是采用顺序存储的方法来表示数组。

计算机的内存结构是一堆(线性)地址结构,对于多维数组,将其存放(映射)到内存一维结构时,有个次序约定问题。即必须按某种次序将数组元素排成一列序列,然后将这个线性序列存放到内存中。

二维数组是最简单的多维数组,以此为例说明多维数组存放(映射)到内存一维结构时的次序约定问题。

二维数组的两种存储方式(以行序为主、以列序为主):

举个例子:

矩阵的压缩存储

        在科学与工程计算问题中,矩阵是一种常用的数学对象,在高级语言编程时,通常将一个矩阵描述为一个二维矩阵。这样可以对其元素进行随机存取,各种矩阵运算也非常简单。

        对于高阶矩阵,若其中非零元素呈某种规律分布或者矩阵中有大量的零元素,若仍然用常规方法存储,可能存储重复的非零元素或零元素,将造成存储空间的大量浪费。所以要对这类矩阵进行压缩存储。

注意:多个相同的非零元素只分配一个存储空间;零元素不分配空间。

接下来我们要掌握 特殊矩阵稀疏矩阵 的压缩存储方式。

广义表的定义

        广义表是线性表的推广和扩充,在人工智能领域中应用十分广泛。我们把线性表定义为n(n\geqslant0)个元素a_1,a_2,...a_n的有穷序列,该序列中的所有元素具有相同的数据类型且只能是原子项(所谓原子项可以是一个数或一个结构,是指结构上不可再分的。)若放松对元素的这种限制,容许它们具有其自身结构,就产生了广义表的概念。

广义表(Lists,又称为列表):是由n(n\geqslant0)个元素组成的有穷序列:LS=(a_1,a_2,...a_n)

广义表的存储结构

由于广义表中的数据元素具有不同的结构,通常用链式存储结构表示,每个数据元素用一个结点表示。因此,广义表中就有两类结点:

一类是表结点:用来表示广义表项,由标志域,表头指针域,表尾指针域组成

一类是原子结点:用来表示原子项,由标志域,原子的值域组成。

只要广义表非空,都是由表头和表尾组成。即一个确定的表头和表尾就唯一确定一个广义表。

什么是广义表?请简述广义表与线性表的区别?

        广义表(Generalized List)是一种扩展了线性表的数据结构,它允许元素既可以是单值,也可以是子表。广义表通过递归方式定义,可以包含任意嵌套层级的子表,从而形成一个更加复杂和有层次结构的数据集合。

        与广义表相对应的是线性表(Linear List),线性表仅包含单值元素,每个元素都有一个后继元素,形成一个线性结构。线性表是最简单和最常见的数据结构之一,例如数组就是线性表的一种实现。

广义表与线性表的区别主要有以下几点:

1. 元素类型:线性表的元素只能是单值,而广义表的元素可以既是单值,也可以是子表。这使得广义表能够表示更加复杂和有层次结构的数据关系。

2. 结构特点:线性表是一种线性结构,每个元素都有唯一的后继元素,形成了一个简单的序列。而广义表则具有更加复杂的层次结构,可以包含任意嵌套层级的子表,形成了一个树状结构。

3. 操作灵活性:由于广义表具有更复杂的结构,因此在操作和处理数据时,广义表比线性表更加灵活。广义表可以使用递归的方式进行遍历和操作,可以处理各种复杂的数据关系,而线性表则相对简单。

综上所述,广义表是一种扩展了线性表的数据结构,允许元素既可以是单值,也可以是子表。广义表具有更加复杂的层次结构和操作灵活性,可以更好地表示和处理各种复杂的数据关系。

一个广义表是(a,(a,b),d,e,(a,(i,j),k)),请画出该广义表的链式存储结构:

                +---+         +---+         +---+         +---+
                | a |---+     |   |---+     | d |---+     | e |
                +---+   |     +---+   |     +---+   |     +---+
                        |             |             |
                        |     +---+   |     +---+   |
                        +---->| a |   +---->| b |   |
                        |     +---+   |     +---+   |
                        |             |             |
                        |     +---+   |             |
                        +---->| i |   +-------------+
                              +---+
                              |
                              |
                              |
                              |     +---+
                              +---->| j |
                                    +---+
                                    |
                                    |
                                    |
                                    |
                                    |     +---+
                                    +---->| k |
                                          +---+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1068823.html

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

相关文章

青少年近视问题不容小觑,蔡司用专业技术助力孩子视力健康发展

根据国家卫健委公布的数据显示,2022年全国儿童青少年近视率达到53.6%,青少年近视已成为社会普遍的眼健康问题。对家长来说,也需要提高对孩子眼视光健康重要性的认知,日常培养青少年良好的用眼习惯,并通过矫正视力的方式…

如何使用 Tensor.art 实现文生图

摘要:Tensor.art 是一个基于 AI 的文本生成图像工具。本文介绍了如何使用 Tensor.art 来实现文生图的功能。 正文: 文生图是指将文本转换为图像的技术。它具有广泛的应用,例如在广告、教育和娱乐等领域。 Tensor.art 是一个基于 AI 的文本…

外汇天眼:真实记录,投资者在盗版MT4平台SCE Group上做交易的经历!

外汇市场是全球最大的金融市场,比起其他市场有着更多天然的优势,但也因为资讯的不对等,导致很多人上当受骗。而在外汇市场上最常见的骗局之一,就是黑平台使用盗版MT4/5交易软件,因为截至目前MT4/5仍是外汇市场交易使用…

汽车电子中的安森美深力科分享一款高性能车规级芯片NCV7520MWTXG

安森美深力科NCV7520MWTXG可编程六沟道低压侧 MOSFET 预驱动器,是一个 FLEXMOS™ 汽车级产品系列,用于驱动逻辑电平 MOSFET。该产品可通过串行 SPI 和并行输入组合控制。该器件提供可兼容 3.3 V/5 V 的输入,串行输出驱动器可基于 3.3 V 或 5 …

在模拟器上安装magisk实现Charles抓https包(三)

经过前两篇的内容,链接如下: 在模拟器上安装magisk实现Charles抓https包(一)_小小爬虾的博客-CSDN博客 在模拟器上安装magisk实现Charles抓https包(二)_小小爬虾的博客-CSDN博客 电脑端的Charles就可以抓…

VS2022 17.8 功能更新:现已支持 C11 线程

早在 VS2022 17.5 版本,Microsoft Visual C 库已经初步支持了 C11 atomics。今天,我们很高兴地宣布,在最新版本 VS2022 17.8 预览版 2 中已正式支持 C11 线程。开发者可以更轻松地将跨平台 C 应用程序移植到 Windows,而无需开发线…

华为OD机试 - 最小步骤数(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入:4 8 7 5 2 3 6 4 8 12、输出:23、说明:4、思路分析 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《…

网络安全总结

前言 本文内容主要摘抄网络规划设计师的教材和腾讯-SUMMER课堂,主要对网络安全进行简单梳理和总结 OSI安全体系 X轴表示8种安全机制,Y轴表示OSI7层模型,Z轴表示5种安全服务,图中X是水平,Y轴竖直,Z轴向外…

2023年中国喷头受益于技术创新,功能不断提升[图]

喷头行业是一个专注于生产和供应各种类型喷头的产业。喷头是一种用于将液体、气体或粉末等物质喷射或喷洒的装置,广泛应用于不同领域,包括工业、农业、家用、医疗等。 喷头行业分类 资料来源:共研产业咨询(共研网) 随…

Redis 获取、设置配置文件

以Ubuntu 为例 redis配置文件 cd /etc/redis sudo vim redis.conf 获取配置文件、修改配置文件

【轻松玩转MacOS】网络连接篇

引言 本篇让我们来聊聊网络连接。不论你是在家、在办公室,还是咖啡厅、机场,几乎所有的MacOS用户都需要连接到互联网。在这个部分,我们将向你展示如何连接到互联网和局域网。让我们开始吧! 一、连接到互联网 首先,我…

农业育种好策略:凌恩生物种质资源数字化全方位解决方案

动植物育种是通过创造遗传变异、改良遗传特性,以培育具有优良性状的动植物新品种的技术。随着高通量组学技术的发展和应用,分子育种等现代科学理论与技术得以发展和不断完善,是未来作物育种的不二选择,它的精准性、高效性都将带领…

NoSQL之 Redis命令工具及常用命令

目录 1 Redis 命令工具 1.1 redis-cli 命令行工具 1.2 redis-benchmark 测试工具 2 Redis 数据库常用命令 2.1 set:存放数据,命令格式为 set key value 2.2 get:获取数据,命令格式为 get key 2.3 keys 命令可以取符合规则的…

深入探索地理空间查询:如何优雅地在MySQL、PostgreSQL及Redis中实现精准的地理数据存储与检索技巧

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

入门级气传导耳机推荐哪款?安利几款好用的气传导耳机

​在当今的快节奏生活中,音乐成为了我们放松身心的重要方式。然而,我们在享受音乐的同时,也面临着耳机线缆的束缚和耳朵的压迫感。这时,气传导耳机应运而生,它们以一种更加先进、舒适的方式来传递音乐,为我…

【C++】-C++11中的知识点(上)--右值引用,列表初始化,声明

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

Linux基本指令一

Linux基本指令一 一、ls指令1、语法2、功能3、常用选项4、示例 二、pwd指令1、功能2、示例 三、cd指令1、语法2、功能3、常用操作4、示例 四、 touch指令1、语法2、功能3、示例 五、mkdir指令1、语法2、功能3、常用选项4、示例 六、rmdir指令1、语法2、适用对象3、功能4、常用选…

孙哥Spring源码第27集

第27集、手写实现AOP 【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】 1、手写实现AOP的缺点有哪些? 增加额外功能时,会对所有的方法 都加入对应的功能 问题 不灵活 (事务 CUD 加入 R 不应该加入&a…

聊聊JDK19特性之虚拟线程 | 京东云技术团队

1.前言 在读《深入理解JVM虚拟机》这本书前两章的时候整理了JDK从1.0到最新版本发展史,其中记录了JDK这么多年来演进过程中的一些趣闻及引人注目的一些特性,在调研JDK19新增特性的时候了解到了虚拟线程这个概念,于是对虚拟线程进行学习整理内…

LLM项目代码改写

背景: 最近在做代码大语言模型生成项目代码的课题。代码生成现在大部分的工作是在做即时代码生成,这个有点类似代码智能提示,只不过生成的可能是一段片段代码;然而对于整个项目代码的生成做的团队并不多,原因大致如下…