数据结构学习笔记(三)——数组与广义表

数组与广义表

一.数组

三元组表

除了存储非零元素值 aij 之外还同时记下其所在行和列的位置 (i, j),这样组成了一个三元组 (i, j, aij)
将稀疏矩阵非零元素对应的三元组所构成的集合,按行优先顺序排列成一个线性表,称为三元组表。

在这里插入图片描述

稀疏矩阵可以由表示非零元素的三元组及其行列数唯一确定

三元组顺序表

  • 将表示稀疏矩阵非零元素的三元组按行优先顺序排列,并依次存放在一组地址连续的存储单元里的方式称为稀疏矩阵的顺序存储结构,采用这种存储结构的稀疏矩阵称为三元组顺序表

结构体形式

#define TriList_Size 1000     	// 三元组表大小,可根据实际需要而定
typedef struct
{ 
    int	 row,col;		// 非零元的行下标和列下标
    ElemType  e;			// 非零元的元素值
}Triple;

typedef struct  
{		     
    Triple  data[TriList_Size+1];  //非零元三元组,data[0]未用
    int	 mu, nu, tu;	//矩阵的总行数、总列数和总非零个数
} TSMatrix; 

二.广义表

  • 广义表,又称列表 ,是线性表的一种推广和扩充
  • 在广义表中取消了对线性表元素的原子限制,允许它们具有其自身结构
  • 广义表又区别于数组,不要求每个元素具有相同类型。

广义表的定义

广义表是 n (n≥0) 个元素 a1, a2, … , an 的有限序列,通常记做:

LS=(a1, a2 , … , an)

LS 是广义表名称
n 是 LS 长度
ai 是 LS 成员(直接元素),可以是单个元素,也可以是广义表,分别称为广义表 LS 的原子和子表。

重要概念:

  • 当LS非空时,第一个直接元素a1称为LS的表头其余的直接元素组成的表(a2,a3,…,an)称为LS的表尾
  • LS中直接元素的个数称为LS的长度,LS中括号的最大嵌套层数成为LS的深度
    在这里插入图片描述
    任何一个非空广义表表头是表中第一个元素,它可以是原子,也可以是广义表;而其表尾必定是广义表

A = ()
因为是空表,所以不能进行取表头和取表尾的操作

B = (e)
GetHead(B) = e, GetTail(B) = ()
取表头为e,取表尾为空

C = (a,(b,c,d))
GetHead(C)= a, GetTail(C) = ((b,c,d))
取表头为a,取表尾为(b,c,d)

D =(A,B,C)
GetHead(D)= A, GetTail(D) = (B,C)

E = (())
GetHead(E)= (), GetTail(E) = ()
取表头为元素“ () ”,取表尾为空

广义表 () 和 (())不同:
()为空表,其长度为 n = 0,不能分解成表头和表尾;
(())非空表,其长度 n = 1,可分解得到其表头()、表尾()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小菲601

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值