数据结构 数组和广义表

本篇文章图片均为B站王卓老师视频截图,推荐跟着王卓老师过一遍概念,老师讲的很简单详细!

一、数组

在栈和队列中我们提到了,栈和队列是特殊的线性表,它特殊在操作受限方面;在这里我们说数组和广义表是线性表的拓展,线性表是广义表的特例;

1、数组的定义

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

一维数组:线性表的数据元素为非结构的简单元素,称为一维数组。

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

2、数组的基本操作

数组的基本操作没有插入和删除,只有取元素值和给数组元素赋值

3、数组的存储方式

我们知道存储方式有两种,一种是顺序存储,一种是链式存储,由于数组结构固定,维数不变,我们通常采用顺序存储。另外因为有多维数组存在,所以需要解决把多维关系映射到一维关系的问题

顺序存储又分为

1.以行序为主序(以下内容都以行序为主序)

2.以列序为主序

这里的L是指存储每个元素所占的存储单元,例如int类型一个存储单元为4个字节

三维数组:页/行/列的顺序,要将多维关系映射到一维中

接下来有道例题,可以巩固上面的一个思想:

A[2][2]的前面有2行,所以有(2*n个元素+2),题目说每个元素占一个空间,所以就是644+(2*n+2)=676,n=15;

A[3][3]=(3*15+3)+644=692;

4、特殊矩阵的存储方式

我们知道矩阵可能会有多个重复的元素或者多个0元素,如果我们为每一个元素都分配一个空间,那就太浪费内存了,那能不能进行一些处理从而减少内存占用呢?当然可以,我们只需要对矩阵进行压缩,能进行压缩的矩阵只有特殊矩阵,这里我们主要介绍以下4中,其中稀疏矩阵最重要

(1)对称矩阵

对称矩阵就是关于主对角线左右两边对称,如图,aij=aji的矩阵,我们只需要存储下三角或者上三角的元素即可

把下三角矩阵按照行序优先顺序存放在一维数组中,数组下标k和元素下标aij有什么关系?

k=n(n-1)/2

(2)三角矩阵

(3)对角矩阵

一个7*7的对角矩阵如图

因为对角矩阵的特征就是以主对角线为分界,所有非0元素集中在以对角线为中心的带状区域中,区域外的值全为0,我们可以采用以对角线为主序的顺序存储方法

(4)稀疏矩阵

稀疏矩阵的定义:

存储方法有两种,三元组法和十字链表法;上图中的就是三元组法,只需要行标、列标、数值三个值确定;缺点也是如此,我们找元素时需要从头开始一个个找,并不能很灵活的找到元素,所以我们采用十字链表法

这里着重需要看看十字链表法

二、广义表

1、广义表的定义

线性表中每个数据元素就是一个简单的元素,但广义表中这个数据元素可以是简单元素也可以是一个子表,这是线性表的一个拓展,有一个很好的例子可以解释这句话

接下来我们看广义表的定义和概念说明,需要认真看后续的性质和运算都围绕这些开展,但是并不难

这里需要注意:表头元素可以是一个原子或一个子表,但是表尾是指除去表头元素后的其他元素组成的表!!

2、广义表的性质

在性质方面需要记忆一下深度和长度的区别,递推表中长度是固定的,有几个元素长度就是几;深度需要看展开广义表后的括号层数啦

为了方便理解,也可以用上图的数状结构表示广义表

3、广义表的基本运算

这里主要有两个运算,GetHead(D)和GetTail(D)

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值