• 数组和稀疏矩阵


    数组

    数组的基本概念
    从逻辑结构上看,一维数组A是n(n>1)个相同类型数据 元素a1、a2、…、an构成的有限序列,其逻辑表示为:A=(a1,a2,…,an)其中,ai(1≤i≤n)表示数组A的第i个元素。

    数组的存储结构

    将数组的所有元素存储在一块地址连续的内存单元中,这是一种顺序存储结构;
    几乎所有的计算机语言都支持数组类型,以C/C++语言为例, 其中数组数据类型具有以下性质
    1. 数组中的元素数目固定
    2. 数组中的所有数组元素具有相同的数据类型
    3. 数组中的每个元素都有一组唯一的下标
    4. 数组是一种随机存储结构,可随机存取数组中的任意数据元素
    LOC(ai)=LOC(a1)+(i-1)*k (0≤i≤n)

    对于一个m行n列的二维数组A(m×n) 存储方式有
    • 以行序为主序的存储

    • 以列序为主序的存储

    特殊矩阵的压缩存储

    特殊矩阵主要形式有

    • 对称矩阵
    • 上三角矩阵/下三角矩阵
    • 对角矩阵
      但是它们都是方阵,即行数和列数相等

    1.对称矩阵的压缩存储

          若一个n阶方阵A[n][n]中的元素满ai,j=aj,i(0≤i,j≤n-1),则称其为n阶对称矩阵



    2.三角矩阵的压缩存储


    3.对角矩阵的压缩存储


    稀疏矩阵

      一个阶数较大的矩阵中的非零元素个数s相对于矩阵元素的总个数t十分小时,即s<<t,该矩阵成为稀疏矩阵
    

    1. 稀疏矩阵的三元组表示方法

    稀疏矩阵中的每一个非零元素需由一个三元组:(i ,j ,ai,j)唯一确定,稀疏矩阵中的所有非零元素构成三元组线性表。





    #include "stdio.h"
    #include <corecrt_malloc.h>
    #define MaxSize 100 //矩阵中非零元素的最大个数
    constexpr auto M = 6;
    constexpr auto N = 7;
    
    //存放一个非零元素
    typedef struct TupNode {
    	int r;	//行号
    	int c;	//列号
    	int d;	//元素值
    }TupNode, * pTupNode; //三元组定义(1,2,a12)  (2,3,a23)
    
    //存放整个稀疏矩阵
    typedef struct TSMatrix {
    	int rows;	//行数值
    	int cols;	//列数值
    	int nums;	//非零元素个数
    	TupNode data[MaxSize]; //三元组
    }TSMatrix, * pTSMatrix;		//三元组顺序表定义
    
    //先创建三元组
    void Create(pTSMatrix t, int arr[M][N]) {
    	int i, j;
    	t->rows = M;
    	t->cols = N;
    	t->nums = 0;
    	for (i = 0; i < t->rows; i++) {
    		for (j = 0; j < t->cols; j++) {
    			if (arr[i][j] != 0) {
    				t->data[t->nums].r = i;
    				t->data[t->nums].c = j;
    				t->data[t->nums].d = arr[i][j];
    				t->nums++;
    			}
    		}
    	}
    }
    //输出三元组
    void Disp(pTSMatrix t) {
    	if (t->nums <= 0)
    		return;
    	for (int i = 0; i < t->nums; i++)
    		printf("	%d	%d	%d
    ", t->data[i].r, t->data[i].c, t->data[i].d);
    }
    void main() {
    	pTSMatrix t;
    	t = (pTSMatrix)malloc(sizeof(TSMatrix));
    	int arr[M][N] = {
    		{0,0,1,0,0,0,0},
    		{0,2,0,0,0,0,0},
    		{3,0,0,0,0,0,0},
    		{0,0,0,5,0,0,0},
    		{0,0,0,0,6,0,0},
    		{0,0,0,0,0,7,4}
    	};
    	Create(t, arr);
    	Disp(t);
    }
    

    输出结果为:

    未完待续----

  • 相关阅读:
    Unity Shader入门精要学习笔记
    Unity Shader入门精要学习笔记
    zabbix_server部署,启动,及端口未监听问题
    Linux Git服务器安装
    GitHub
    nginx 认证访问web
    Jenkins可持续集成
    svn
    mariadb安装配置
    nginx跟tp5无法加载控制器
  • 原文地址:https://www.cnblogs.com/wfszmg/p/12988548.html
Copyright © 2020-2023  润新知