数据结构——数组和广义表

数组

  • 数据的存储方式有两种
    1. 行优先存储(先存完一行,再存下一行)
    2. 列优先存储(先存完一列,再存下一列)
      因为存储顺序的不同,导致数据位置的不同

题型一:求元素的存储位置

矩阵

  • 稀疏矩阵:零元素较多的矩阵
  • 特殊矩阵:对阵矩阵,

对阵矩阵

数据关于主对角线对称的矩阵

  • 对称矩阵存储在一维数组中效率比较高的存储方式
    由于数据是一样的,可以只存储对角线极其一侧的数据,然后根据数学知识找出特殊位置对应的下表(求前面有多少个数据):A[0,0]=[0],A[n-1,0]=[n*(n-1)/2]

三角矩阵

分为上三角和下三角矩阵:对角线一般有数据,另一半是零

  • 三角矩阵存储在一维数组中效率比较高的存储方式
    以上三角为例:A[0,0]=[0],A[0,n-1]=[n-1],A[n-1,n-1]=[n*(n+1)/2-1]

对角矩阵

矩阵只有平行一对角线的斜行有数据,其余的都是零,有几个斜行就为几对角矩阵

  • 对角矩阵存储在一维数组中效率比较高的存储方式

稀疏矩阵

零元素较多的矩阵,但是这个零的个数没有明确的界定

  • 三元组表示:数据的值,行标,列标
// 三元组的表示方法
typedef struct
{
	float val;
	int i, j;
} Trimat;

Trimat tri[maxSice + 1];

float val = tri[k].val;
int i = tri[k].i;
int j = tri[k].j;
  • 邻接表表示法

广义表

广义表就是把线性表中元素不可再分的性质取消掉,在广义表中每一个结点可以是一个原子,也可以是广义表本身。

逻辑结构

  • A = (),A是一个空表,长度为0,深度为1.

  • B = (d,e)B的元素全是原子,长度为2,深度为1

  • C = (b,(e,f))C有两个两个元素,分别是原子b和广义表(e,f)长度为2,深度为2

  • D = (B,C)D的元素全是广义表,长度为2,深度为3,由此可见一个广义表的子表可以是其它已经定义的广义表的引用。

  • E = (a,E)E有两个元素,原子a和本身,长度为2,由此可见一个广义表可以递归定义的。展开E可以得到(a(a(a(a, …))))),是一个无限深的广义表。

  • 广义表长度:为表中最上层元素的个数。

  • 广义表深度:为表中括号的最大层数((d,e),(b(c,r)))
    广义表的标头(head)和表尾(tail):当广义表非空的时候,第一个元素为标头,其余组成元素为表尾

存储结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值