数组和广义表

一、数组

1.定义

数组是数据结构的基本结构形式,它是一种顺序式的结构。

数组是存储同一类型数据的数据结构,使用数组时需要定义数组的大小和存储数据的数据类型。

2.分类

数组分为一维数组和多维数组,数组的维数由数组下标的个数确定的。

可以说数组是有限个同类型数据元素组成的序列。

1>一维数组

一维数组是指下标的个数只有一个的数组,有时称为向量,是最基本的数据类型。

一维数组的数据存储按照顺序存储,逻辑地址和物理地址都是连续的。

2>多维数组

多维数组是指下标的个数有两个或两个以上。我们比较常用的是二维数组。因为三维一项的数组存储可以简化为二维数组的存储。

以二维数组为例,二维数组在顺序存储时一般有两种:

第一种行优先顺序:存储时先按行从小到大的顺序存储,在每一行中按列号从小到大存储。

第二种列优先顺序:存储时先按列从小到大的顺序存储,在每一列中按行号从小到大存储。

二、矩阵的存储

1.压缩存储

矩阵的压缩存储就是存储数组时,尽量减少存储空间,但数组中每个元素必须存储。

在矩阵中,如果有规律可寻,只要存储其中一部分,而另外一部分的存储地址可以通过相应的算法将它计算出来,从而占有较少的存储空间达到存储整个矩阵的目的。

矩阵的压缩存储仅能针对特殊矩阵使用,对于没有规律可循的二维数组则不能使用。

二维数组的压缩存储一般分为3种,它们分别是对称矩阵、稀疏矩阵和三角矩阵。

2.对称矩阵

若n阶矩阵A中的元素满足以下条件:aij=aji,i≥1,j≥1,则成为n阶对称矩阵。

对于对称矩阵如果不采用压缩存储,占用的存储单元为n*n个,因为是对称矩阵,所以只要存储对角的数据元素和一般的数据元素即可,占用的存储单元有n*(n-1)/2个。

对角矩阵是指矩阵的所有非零元素都集中在以主对角线为中心的带状区域中,即除了主对角线上和直接在主对角线上、下方若干条对角线上的元素之外,其余元素皆为零。

3.稀疏矩阵

对稀疏矩阵很难下一个确切的定义,它只是一个凭人们的直觉来理解的概念。

一般认为,一个较大的矩阵中,零元素的个数相对于整个矩阵元素的总个数所占比例较大时,该矩阵就是一个稀疏矩阵。

稀疏矩阵的压缩存储采用三元组的方法实现。其存储规则是每一个非零元素占有一行,每行中包含非零元素所在的行号、列号、非零元素的数值。

为完整描述稀疏矩阵,一般在第一行描述矩阵的行数、列数和非零元素的个数。其逻辑描述为(即三元组存储方式):(row col value)其中row表示行号,col表示列号,value表示非零元素的值。 如下图是一种稀疏矩阵的三元组存储形式:

原始数据:

三元组存储形式:

第一行表示矩阵的数据总数:5行、6列、4个值。 第二行表示数据的位置及内容:2行、2列、值为3。 第三行、第四行依次类推。 首先应该将稀疏矩阵转换为三元组存储,然后再利用三元组的存储,实现对矩阵的各种运算。

在Java中,除了一下两点以外,向量与数组完全相同:

第一:一个向量是类java.util.Vector的实例

第二:一个向量的长度可以改变。

三、广义表

1.定义

广义表是线性表的扩展,具体定义为n(n≥0)个元素的有限集合。

n的值是广义表的长度,如果n=0称广义表为空表。

广义表的数据元素有两种类型:一个是不可再分的元素(原子元素);一个是可以再分的元素(子表)。

如果所有的元素都是原子元素,则称为线性表。

如果数据元素中含有子表元素,则称为广义表。

广义表一般记作:LS=(a1,a2,……,an)

常见的广义表为:A=()、B=(())、C=(a,b)、D=(A,B,C)、E=(a,E)

广义表中含有元素的个数称为广义表的长度,广义表中含有的括号对数称为广义表的深度。

广义表有三个重要的特点:

第一:广义表的元素可以是子表,而子表的元素还可以是子表,广义表是一个多层次的结构。

第二:广义表可以为其他广义表所共享。

第三:广义表可以是一个递归表,即表也可以是其本身的一个子表。

广义表的表头是广义表中的第一个元素,而表尾则是去掉表头之后的所有元素。

广义表中通常利用求表头和表尾运算求得广义表中某个元素的值。

2.存储方式

广义表的存储方法有很多种,一般采用链表存储。采用链表存储时的结点存储的逻辑结构如下图:

flag表示标志位。当flag为0时,表示该结点为原子元素,info表示原子元素的值;当flag为1时表示该结点为子表,info表示指针,指向该子表的第一个结点。 link表示指针,指向广义表的下一个元素。 例如:广义表A=(a,(b,(c)),(d,e),f),利用链表存储的逻辑图如下:

广义表可以采用多种方式实现,最简单的方法是使用数组实现。

java 广义表_数组和广义表相关推荐

  1. java实现将A表数据转移到B表_解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表(merge into)...

    作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表: 语法: MERGE INTO [your table-name] [rename your table h ...

  2. mysql设计积分兑换表_积分系统数据库表设计.docx

    积分系统数据库表设计 文件编号:JHDZ/SJ 密 级: 云上城积分功能数据库设计文档 项目名称:<云上城>项目代号:XXX版 本:V1.0编制单位:平台运营编制日期:2014-10-08 ...

  3. mysql 线性表_数据结构之线性表

    概要 参考<大话数据结构>,把常用的基本数据结构梳理一下. 线性表 定义 线性表(List):零个或多个数据元素的有限序列. 若将线性表记为 \((a_1, \cdots, a_{i-1} ...

  4. mysql 邻接表_图的邻接表存储结构详解

    通常,图更多的是采用链表存储,具体的存储方法有 3 种,分别是邻接表.邻接多重表和十字链表. 本节先讲解图的邻接表存储法.邻接表既适用于存储无向图,也适用于存储有向图. 在具体讲解邻接表存储图的实现方 ...

  5. mysql 分库分表 建表_【分库分表】sharding-jdbc实践—分库分表入门

    一.准备工作 1.准备三个数据库:db0.db1.db2 2.每个数据库新建两个订单表:t_order_0.t_order_1 DROP TABLE IF EXISTS`t_order_x`;CREA ...

  6. MYSQL中的主表和父表_主表,从表,关联表,父表,子表

    一.前言 在数据库设计中,Hibernate,iBatis等ORM框架的使用中经常听说主键,外键,主表,从表,关联表,父表,子表之类的术语,弄懂它们之前的区别与联系对于数据库设计和ORM框架的学习使用 ...

  7. 外链式样式表_引入CSS样式表(书写位置)

    CSS初识 CSS(Cascading Style Sheets) 美化样式 CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体.大小.对齐方式等).图片 ...

  8. mysql 事实表 维度表_数据库的事实表与维度表

    维度表示你要对数据进行分析时所用的一个量,比如你要分析产品销售情况,你可以选择按类别来进行分析,或按区域来分析,这样的按照什么分析就构成一个维度.前面的实例就可以有两个维度:类型和区域.另外每个维度还 ...

  9. excel合并多个工作表_多个工作表或者多个工作簿的合并计算

    哈喽,everybody,作为一个与excel打交道长达六年的职业老手,我会整理汇总一些十分有利于提高工作效率的小tip.也当作是我为自己知识点做的些许总结吧. 今天我们就来聊聊如何快速合并多个工作表 ...

最新文章

  1. [转]MVC实用架构设计(三)——EF-Code First(3):使用T4模板生成相似代码
  2. video processing on Mac and iOS
  3. 阿里开源分布式事务解决方案 Fescar
  4. 企业dns 服务器的搭建
  5. centos7是php多少,centos7怎么安装php
  6. Spring Cloud Stream 与 Kafka 整合
  7. How is component metadata dependency dependencies consumed in the runtime
  8. Wireshark文档阅读笔记-TCP 3 way handshaking解析与实例
  9. java解析消息头代码_javaWeb项目-文件下载的消息头和编码问题
  10. eoLinker-AMS接口管理系统
  11. TCP/IP系列——长连接与短连接的区别
  12. 哪里有现成的问卷调查数据_何去何从?被数据掩埋的「消费者旅程」
  13. java web外文文献_JAVAWeb外文文献毕业设计.doc
  14. 失业培训计算机试题,2017年职称计算机考试考前练习试题(11)
  15. 记一次Kafka warning排查过程
  16. Linux中:wq :wq! :q :q!的区别
  17. 美国加州中学课本 教材介绍 - Glencoe系列- 美国初中语文 数学 科学 健康
  18. 遥遥领先影像组件:dicomobjects.ocx
  19. 终极!绝无仅有,史上最强python爬虫资料分享!
  20. win7点了计算机看不见硬盘,在安装Win7系统时找不到硬盘怎么办

热门文章

  1. DMA实现数据传输流程
  2. 阿里云龙珠训练营学习打卡第一天
  3. 为何16寸的笔记本电脑开始兴起?
  4. Java中的21种锁
  5. Android之 Bitmap使用
  6. 起初学习简单练习,有关整数的求和,求偶,求奇,求素数.
  7. 手机html5 tap事件,HTML5触摸事件演化tap事件介绍
  8. 【译】Delta Lake 0.5.0介绍
  9. springboot电信客户忠诚度(源码下载)
  10. 集群、分布式、负载均衡