数据结构—数组和广义表

4.2数组

数组:按一定格式排列起来的,具有相同类型的数据元素的集合。

**一维数组:**若线性表中的数据元素为非结果的简单元素,则称为一维数组。

**一维数组的逻辑结构:**线性结构,定长的线性表。

**声明格式:**数据类型 变量名称 [长度] ;

例如:int num[5] = {0,1,2,3,4};

**二维数组:**若一维数组中的数据元素又是一维数组结构,则称为二维数组。

二维数组的逻辑结构:

  1. 非线性结构:每一个数据元素既在一个行表中,又在一个列表中。
  2. 线性结构定长的线性表:该线性表的每个数据元素也是一个定长的线性表。

**声明格式:**数据类型 变量名称 [行数] [列数];

例如:int num [5] [8];

在C语言中,一个二维数组类型也可以定义为一维数组类型(其分量类型为一维数组类型),即:

  typedef int array2[m][n];
等价于:
  typedef int array1[n];
  typedef array1 array2[m];

**三维数组:**若二维数组中的元素又是一个一维数组,则称作三维数组。

**n维数组:**若 n - 1 维数组中的元素又是一个一维数组结构,则称作 n 维数组。

**结论:**线性表结构是数组结构的一个特例,而数组结构又是线性表结构的扩展。

**数组特点:**结构固定——定义后,维数和维界不再改变。

**数组基本操作:**除了结构的初始化和销毁之外,只有取元素和修改元素值的操作。

4.2.1数组的顺序存储结构

数组特点:结构固定——维数和维界不变。

一般都是采用顺序存储结构来表示数组。

**注意:**数组可以是多维的,但存储数据元素的内存单元地址是一维的,因此,在存储数组结构之前,需要解决将多维关系映射到一维关系的问题。

一维数组:

例:有数组定义:int a[5]

每个元素占用4字节,假设a[0]存储在2000单元,a[3]地址是多少?

LOC(0) = a = 2000 L=4

LOC(3) = 3*4+2000

LOC(i) = i*L + 首地址

存储单元是一维结构,而数组是个多维结构,则用一组连续存储单元存放数组的数据元素就有个次序约定问题。

二维数组可有两种存储方式:

  1. 以行序为主序;

    设数组开始存储位置LOC(0,0),存储每个元素需要L个存储单元

    数组元素a[i] [j]的存储位置是:LOC(i,j)=LOC(0,0) + (n * i + j) * L

  2. 以列序为主序。

**三维数组:**按页/行/列存放,页优先的顺序存储。

4.2.2特殊矩阵的压缩存储

**矩阵:**一个由 m*n 个元素排成的 m 行 n 列的表。

**矩阵的常规存储:**将矩阵描述为一个二维数组。

矩阵的常规存储的特点:

  1. 可以对其元素进行随机存取。
  2. 矩阵运算非常简单;存储的密度为1.

**不适宜常规存储的矩阵:**值相同的元素很多且呈某种规律分布;零元素多。

**矩阵的压缩存储:**为多个相同的非零元素只分配一个存储空间;对零元素不分配空间。

第四章 变 换 - 小专栏

1、什么是压缩存储

若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。

2、什么样的矩阵能够压缩?

一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。

3、什么叫稀疏矩阵?

矩阵中非零元素的个数较少(一般小于5%)

1.对称矩阵

10421 - 对称矩阵

**【特点】:**在 n*n 的矩阵 a 中,满足如下性质:aij=aji(1≤i , j≤n)

**【存储方法】:**只存储下(或者上)三角(包括主对角线)的数据元素。共占用 n(n+1)/2个元素空间。

**【存储结构】:**对称矩阵上下三角中的元素数均为:n(n+1)/2

​ 可以以行序为主序将元素存放在一个一维数组 sa[ n(n+1)/2 ]中。

2.三角矩阵

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6FofxLkg-1690537372616)(https://tse1-mm.cn.bing.net/th?id=OIF-C.uHr%2bn0jNJ2j8NRD2iircPA&pid=ImgDet&rs=1)]

**【特点】:**对角线以下(或者以上)的数据元素(不包括对角线)全部为常数c。

**【存储方法】:**重复元素c共享一个元素存储空间,共占用n(n+1)/2+1个元素空间:[1…n(n+1)/2+1]

上三角矩阵:

特殊矩阵的压缩存储_Faith_xzc的博客-CSDN博客

下三角矩阵:

三角矩阵压缩 的图像结果

3.对角矩阵(带状矩阵)

img

**【特点】:**在n*n的方阵中,所有非零元素都集中在以主对角线为中心的带状区域中,区域外的值全为0,则称为对角矩阵。常见的有三对角矩阵、五对角矩阵、七对角矩阵等。

数据结构和算法基础-听课摘抄8-串、数组和广义表 - 知乎

4.稀疏矩阵

**稀疏矩阵:**设在 m*n 的矩阵中有 t 个非零元素。

​ 令 δ = t / (m*n)

​ 当 δ ≤ 0.05 时称为稀疏矩阵。

(十五)稀疏矩阵和三元组稀疏矩阵压缩算法_靠谱的混蛋的博客-CSDN博客_稀疏矩阵压缩算法

**压缩存储原则:**存各非零元素的值,行列位置和矩阵的行列数。

4.1三元组顺序表

稀疏矩阵之基于数组形式实现COO和CSR_chenxina7314的博客-CSDN博客

注意:为更可靠描述,通常再加一个“总体”信息:即总行数、总列数、非零元素总个数。

三元组顺序表又称有序的双下标法。

三元组顺序表的优点:非零元素在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。

三元组顺序表的缺点:不能随机存取。若按行号存取某一行中的非零元素,则需从头开始进行查找。

4.2十字链表
  • **优点:**它能够灵活地插入因运算而产生的新的非零元素,删除因运算而产生的新的零元素,实现矩阵的各种运算。

  • 在十字链表中,矩阵的每一个非零元素用一个结点表示,该结点除了(row,col,value)以外,还要有两个域:

    • right:用于链接同一行中的下一个非零元素。
    • down:用以链接同一列中的下一个非零元素。
  • 十字链表中结点的结构示意图:

    img

    十字链表法,十字链表压缩存储稀疏矩阵详解

4.3广义表

4.3.1广义表定义

广义表(又称列表Lists)是n≥0个元素 a0,a1,…,an-1的有限序列,其中每一个ai或者是原子,或者是一个广义表。

例如:中国举办的国际足球邀请赛,参赛队伍名单可表示如下:

(阿根廷,巴西,德国,法国,(),西班牙,意大利,英国,(国家队,山东鲁能,广州恒大))

在这个表中,叙利亚队应排在法国队的后面,但未能参加,成为空表。国家队,山东鲁队,广州恒大均作为东道主的参赛队参加,构成一个小的线性表,成为原线性表的一个数据元素。这种拓宽了的线性表就是广义表。

  • 广义表通常记作:LS=( a1,a2,…,an

  • 习惯上,一般用大写字母表示广义表小写字母表示原子

  • **表头:**若LS非空(n≥1),则其第一个元素a1就是表头。记作head(LS)=a1.

    注意:表头可以是原子,也可以是子表。

  • 表尾除表头之外的其他元素组成的表。记作tail(LS)=(a2,…,an)

    注意:表尾不是最后一个元素,而是一个子表。

    例如:(1) A=() 空表,长度为0

    ​ (2)B=(( )) 长度为1,表头、表尾均为()。

    ​ (3)C=(a,(b,c)) 长度为2,由原子a和子表(b,c)构成。表头为a,表尾为((b,c))

    ​ (4)D=(x,y,z) 长度为3,每一项都是原子。表头为x,表尾为(y,z)

    ​ (5)E=(C,D) 长度为2,每一项都是子表。表头为C,表尾为(D)

    ​ (6)F=(a,F) 长度为2,第一项为原子,第二项为它本身。表头为a,表尾为(F)。F=(a,(a,(a,…)))

4.3.2广义表的性质

  1. 广义表的数据元素有相对应次序;一个直接前驱和一个直接后继。

  2. 广义表的长度定义为最外层所包括元素的个数,如C=(a,(b,c))是长度为2的广义表。

  3. 广义表的深度定义为该广义表展开后所含括号的重数

    注意:“原子”的深度为0;“空表”的深度为1。

  4. 广义表可以为其他广义表共享:如:广义表B就共享表A。在B中不必列出A的值,而是通过名称来引用。B=(A)

  5. 广义表可以是一个递归的表。

    注意:递归表的深度是无穷值,长度是有限值。

  6. 广义表是一个多层次结构,广义表的元素可以是单元数,也可以是子表,而子表的元素还可以是子表。

    二叉树的存储方式_长颈鹿仙女的博客-CSDN博客_二叉树的存储方式

4.3.3广义表和线性表的区别

广义表可以看成是线性表的推广线性表是广义表的特例

广义表的结构相当灵活,在某种前提下,它可以兼容线性表、数组、数和有向图等各种常见的数据结构。

当二维数组的每行(或每列)作为子表处理时,二维数组即为一个广义表。

另外,数和有向图也可以用广义表来表示。

由于广义表不仅集中了线性表,数组,数和有向图等常见数据结构的特点,而且可有效地利用存储空间,因此在计算机的许多应用领域都有成功使用广义表的实例。

4.3.4广义表的基本运算

  1. 求表头GetHead(L):非空广义表的第一个元素,可以是一个单一元素,也可以是一个子表。
  2. 求表尾GetTail(L):非空广义表除去表头元素以外其他元素所构成的表,表尾一定是一个表。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue通过指令 命令将打包好的dist静态文件上传到腾讯云存储桶 (保存原有存储目录结构)

1、在项目根目录创建uploadToCOS.js文件 (建议起简单的名字 方便以后上传输入命令方便) 2、uploadToCOS.js文件代码编写 const path = require(path); const fs = require(fs); const COS = require(cos-nodejs-sdk-v5);// 配置腾讯云COS参数 const cos = new COS({SecretI…

基于Docker-compose创建LNMP环境并运行Wordpress网站平台

基于Docker-compose创建LNMP环境并运行Wordpress网站平台 1.Docker-Compose概述2.YAML文件格式及编写注意事项3.Docker-Compose配置常用字段4.Docker Compose常用命令5.使用Docker-compose创建LNMP环境,并运行Wordpress网站平台1. Docker Compose 环境安装下载安装查…

《入门级-Cocos2d 4.0塔防游戏开发》---第二课:游戏加载界面开发

目录 一、开发环境介绍 二、开发内容 2.1 修改窗口的大小。 2.2 添加加载场景相关代码 2.3 添加资源 三、显示效果 四、知识点 4.1 Sprite 4.2 定时器 一、开发环境介绍 操作系统:UOS1060专业版本。 cocos2dx:版本 环境搭建教程: 统信UOS下配…

cURL error 1: Protocol “https“ not supported or disabled in libcurl

1、php项目composer update报错 2、curl -V检查 发现curl已经支持了https了 3、php版本检查 4、php插件检查 插件也已经含有openssl组件了 5、phpinfo检查 curl是否开启ssl 定位到问题所在,php7.4的 curl扩展不支持 https 需要重装 php7.4的curl扩展 6、curl下载 下…

大学生活题解

样例输入: 3 .xA ... Bx.样例输出: 6思路分析: 这道题只需要在正常的广搜模板上多维护一个— —方向,如果当前改变方向,就坐标不变,方向变,步数加一;否则坐标变,方向不…

微信小程序radio单选按钮选中与取消

wxml <view bindtapcheckedTap><radio checked"{{checked}}">设为默认</radio> </view> wxss <style lang"less" > radio .wx-radio-input {border-radius: 50%; /* 圆角 */width: 24rpx;border: 2rpx solid #5e5e5f;hei…

centos7安装tomcat

安装tomcat 必须依赖 JDK 环境&#xff0c;一定要提前装好JDK保证可以使用 一、下载安装包 到官网下载 上传到linux 服务器 二、安装tomcat 创建tomcat 文件夹 mkdir -p /usr/local/tomcat设置文件夹权限 chmod 757 tomcat将安装包上传至 新建文件夹 解压安装包 tar zx…

解读 Zebec Protocol 发布的最新路线图,向 Web2 世界跨越的野望

近期&#xff0c;流支付协议 Zebec Protocol 发布了最新的路线图&#xff0c;揭示了生态在未来一年的全新发展规划。目前&#xff0c; Zebec Protocol 生态打造了一套全新的产品矩阵&#xff0c;包括模块化 Layer3 链 Nautilus Chain 、流支付应用 Zebec APP 以及薪酬管理协议 …

深入了解数据库的索引分类以及回表查询原理

索引的分类 在InnoDB存储引擎中的又可以分为以下两种 聚集索引的选取规则 如果有主键&#xff0c;主键索引就是聚集索引。 如果不存在主键&#xff0c;将会使用第一个唯一&#xff08;UNIQUE&#xff09;索引作为聚集索引 如果表没有主键&#xff0c;或者没有合适的唯一索引…

idea 关于高亮显示与选中字符串相同的内容

dea 关于高亮显示与选中字符串相同的内容&#xff0c;本文作为个人备忘的同时也希望可以作为大家的参考。 依次修改File-settings-Editor-Color Scheme-General菜单下的Code-Identifier under caret和Identifier under caret(write)的Backgroud色值&#xff0c;可以参考下图。…

记录vue的一些踩坑日记

记录vue的一些踩坑日记 安装Jq npm install jquery --save vue列表跳转到详情页&#xff0c;再返回列表的时候不刷新页面并且保持原位置不变&#xff1b; 解决&#xff1a;使用keepAlive 在需要被缓存的页面的路由中添加&#xff1a;keepAlive: true, {path: /viewExamine,nam…

自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配,用于找到与查询语句最相似的文本

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下自然语言处理14-基于文本向量和欧氏距离相似度的文本匹配&#xff0c;用于找到与查询语句最相似的文本。NLP中的文本匹配是指通过计算文本之间的相似度来找到与查询语句最相似的文本。其中一种常用的方法是基于文本…

贼全! 一举通关的 Spring+SpringBoot+SpringCloud 全攻略, 是真香啊

前几天&#xff0c;有幸从朋友那里得到了一份 Alibaba 内部的墙裂推荐的“玩转 Spring 全家桶的 PDF”&#xff0c;我也不是个吝啬的人&#xff0c;好的东西当然要一起分享。那今天我就秀一把&#xff0c;带你一站通关 Spring、Spring Boot 与 Spring Cloud,让你轻松斩获大厂 O…

【C++】多态、黑马程序员案例— —电脑组装、Visual Studio开发人员工具查看内部结构,cl /d1 reportSingleClassLayout

author&#xff1a;&Carlton tag&#xff1a;C topic&#xff1a;【C】多态、黑马程序员案例— —电脑组装、Visual Studio开发人员工具查看内部结构,cl /d1 reportSingleClassLayout website&#xff1a;黑马程序员C date&#xff1a;2023年7月24日 目录 纯虚函数、抽…

【Spring】什么是Bean的生命周期及作用域,什么是Spring的执行流程?

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE进阶 在前面的播客中讲解了如何从Spring中存取Bean对象&#xff0c;那么本篇我们来讲解Bean对象的生命周期是什么&#xff0c;Bean对象的6种作用域分别是什么&#xff0c;都有哪些区别&#xff…

7年经验之谈 —— 浅谈web性能测试

什么是性能测试&#xff1f; web性能应该注意些什么&#xff1f; 性能测试&#xff0c;简而言之就是模仿用户对一个系统进行大批量的操作&#xff0c;得出系统各项性能指标和性能瓶颈&#xff0c;并从中发现存在的问题&#xff0c;通过多方协助调优的过程。而web端的性能测试…

高效协作处理缓存清理需求:生产者-消费者模式助力多模块缓存管理

在现代应用系统中&#xff0c;缓存是提高性能和减少数据库负载的重要手段之一。然而&#xff0c;缓存的数据在某些情况下可能会过期或者变得无效&#xff0c;因此需要及时进行清理。在复杂的应用系统中&#xff0c;可能有多个系统、多个模块产生缓存清理需求&#xff0c;而这些…

【LeetCode】剑指 Offer Ⅱ 第1章:整数(5道题) -- Java Version

题库链接&#xff1a;https://leetcode.cn/problem-list/e8X3pBZi/ 题目解决方案剑指 Offer II 001. 整数除法快速除 ⭐剑指 Offer II 002. 二进制加法模拟&#xff1a;StringBuilder ⭐剑指 Offer II 003. 前 n 个数字二进制中 1 的个数动规&#xff1a;res[i] res[i & (…

【组内工作】木马回联

文章目录 C2服务器安装和运行方法CrossC2运行方法sliver运行方法empire安装方法DeimosC2安装教程TrevorC2安装教程&#xff1a; C2服务器的流量特征CrossC21. 心跳包2. 命令3. ja3/ja3s Sliver1. http2. https empirehttphttps DeimosC2https TrevorC2 C2服务器安装和运行方法 …

C\C++内存管理

目录 1.C/C内存分布2.C语言中动态内存管理方式3.C中动态内存管理3.1new/delete内置类型3.2new和delete操作自定义类型 4.operator new与operator delete函数4.2重载operator new与operator delete&#xff08;了解&#xff09; 5.new和delete的实现原理5.1内置类型5.2 自定义类…