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

本文详细介绍了数组的特点,包括特殊矩阵如对称、三角、对角矩阵的压缩存储方法,以及稀疏矩阵的三元组顺序表、十字链表法和行逻辑连接的顺序表等存储方式。同时,概述了广义表的概念,其长度和深度的计算,并展示了链表表示下的相关操作,如创建、复制和输出广义表。
摘要由CSDN通过智能技术生成

数组

特点

数组的特点:结构固定,定义后维数和维界不变。数组可以是多维,但存储空间是一维的,所以重点在解决映射关系。注意数组中元素位置的计算。
三维数组按页优先的顺序存储
在这里插入图片描述

特殊矩阵的压缩存储

1.对称矩阵压缩为只用存储下/下三角(包括对角线元素)在这里插入图片描述

个元素←→ n(n+1)/2元素
a[i][j] ←→ b[k]数组下标0开始
在这里插入图片描述

2.三角矩阵的压缩

n²个元素←→ n(n+1)/2+1元素,常数c共享一个元素存储空间故+1
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.对角矩阵的压缩存储

在这里插入图片描述
当b=1时称为三对角矩阵。其压缩地址计算公式如下:k=2i+j
对于其他对角矩阵:可采用二维数组存储

在这里插入图片描述

稀疏矩阵的存储方式

三元组顺序表

稀疏矩阵中的每一个非零元素需由一个三元组:唯一确定,稀疏矩阵中的所有非零元素,通常再增加一个总体信息:总行数,总列数,非零元素总个数,构成三元组线性表。
优点:非零元再表中按行徐有序存储,便于进行依行顺序处理的矩阵运算
缺点:不能随机存取,若按行号存取某一行中的非零元,需从头开始查找

十字链表法

在这里插入图片描述优点:能够灵活地插入运算后生成的非零元,删除产生的新零元,实现矩阵各种运算

行逻辑连接的顺序表

相关操作

定义

//将矩阵行列号也看作0开头与数组开头对应
typedef struct {
   
	int r;//行号
	int c; //列号
	ElemType d;//元素值
}TupNode; //三元组定义

typedef struct {
   
	int rows; //行数值
	int cols; //列数值
	int nums;//非零元素个数
	TupNode data[MaxSize];
}TSMatrix; //三元组顺序表定义

从一个二维矩阵创建其三元组表示

void CreateMartix(TSMatrix& t, ElemType A[M][N]) {
   
	int i, j;
	t.rows = M; t.cols = N; t.nums = 0;
	for (i = 0; i < M; i++) {
   
		for(j = 0; j < N; j++) {
   
			if (!A[i][j]) {
   
				t.data[t.nums].r = i;
				t.data[t.nums].c = j;
				t.data[t.nums].d = A[i][j];
				t.nums++;

			}
		}
	}
}

三元组元素赋值

/******************
  
 ①将一个非0元素修改为另一个非0值
 ②将一个0元素修改为非0值,需要增加元素
 
*******************/
void Value(TSMatrix& t, ElemType e, int i, int j) {
   
	if (i >= t.rows || j >= t.cols) return;
	int k = 0, k1;
	while (k<t.nums && i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值