数据结构实践——压缩存储的对称矩阵的运算

本文针对数据结构基础系列网络课程(5):数组与广义表的实践项目。

【项目 - 压缩存储的对称矩阵的运算】
设计算法,实现两个用压缩形式存储的对称矩阵A和B的加法和乘法。实现中请使用好前面设计的基本运算。

[参考解答]

#include <stdio.h>
#define N 4
#define M 10
int value(int a[],int i,int j)
{
    if (i>=j)
        return a[(i*(i+1))/2+j];
    else
        return a[(j*(j+1))/2+i];
}
void madd(int a[],int b[],int c[][N])
{
    int i,j;
    for (i=0; i<N; i++)
        for (j=0; j<N; j++)
            c[i][j]=value(a,i,j)+value(b,i,j);
}
void mult(int a[],int b[],int c[][N])
{
    int i,j,k,s;
    for (i=0; i<N; i++)
        for (j=0; j<N; j++)
        {
            s=0;
            for (k=0; k<N; k++)
                s=s+value(a,i,k)*value(b,k,j);
            c[i][j]=s;
        }
}
void disp1(int a[])
{
    int i,j;
    for (i=0; i<N; i++)
    {
        for (j=0; j<N; j++)
            printf("%4d",value(a,i,j));
        printf("\n");
    }
}
void disp2(int c[][N])
{
    int i,j;
    for (i=0; i<N; i++)
    {
        for (j=0; j<N; j++)
            printf("%4d",c[i][j]);
        printf("\n");
    }
}
int main()
{
    int a[M]= {1,2,3,4,5,6,7,8,9,10};  //a表示压缩存储的对称矩阵
    int b[M]= {1,1,1,1,1,1,1,1,1,1};
    int c1[N][N],c2[N][N];
    madd(a,b,c1);
    mult(a,b,c2);
    printf("a矩阵:\n");
    disp1(a);
    printf("b矩阵:\n");
    disp1(b);
    printf("a+b:\n");
    disp2(c1);
    printf("a×b:\n");
    disp2(c2);
    printf("\n");
    return 0;
}
时间: 2024-09-20 00:10:23

数据结构实践——压缩存储的对称矩阵的运算的相关文章

数据结构例程——对称矩阵的压缩存储及基本运算

本文针对数据结构基础系列网络课程(5):数组与广义表中第2课时特殊矩阵的压缩存储. 问题:用压缩形式存储对称矩阵,实现下面的操作并测试 void Init(int *&b);//为N阶对称矩阵初始化存储数据的一维数组b int Value(int b[], int i, int j);//返回存储在b[M]中,对应二维数组A[i][j]的值 void Assign(int b[], int e, int i, int j);//将e赋值给对应二维数组元素A[i][j],要存储到b[M]中 voi

数据结构实践项目——数组和广义表

本文针对 [数据结构基础系列网络课程(5):数组和广义表] 1. 数组的基本概念与存储结构 2. 特殊矩阵的压缩存储 3. 稀疏矩阵的三元组表示 4. 稀疏矩阵的十字链表表示 5. 广义表 6. 广义表的存储结构及基本运算的实现 [项目1 - 猴子选大王(数组版)] 一群猴子,编号是1,2,3 -m,这群猴子(m个)按照1-m的顺序围坐一圈.从第1只开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,最后一只出圈的猴子为大王.输入m和n,输出猴子离开圈子的顺序,从中也可以看出最后为大王是几号

C++数组应用之特殊矩阵的压缩存储

矩阵: 矩阵是数值程序设计中经常用到的数学模型,它是由 m 行和 n 列的数值构成(m=n 时称为方阵).在用高级语言编制的程序中,通常用二维 数组表示矩阵,它使矩阵中的每个元素都可在二维数组中找到相对应的存储位置 .然而在数值分析的计算中经常出现一些有下列特性的高阶矩阵,即矩阵中有很 多值相同的元或零值元,为了节省存储空间,需要对它们进行"压缩存储 ",即不存或少存这些值相同的元或零值元. 操作:可以对矩阵作 加.减.乘等运算. 存储压缩目标: 节约存储空间 压缩 的方法: 零元不存

mcu-请教jpeglib库在压缩存储jpeg图片的详细过程

问题描述 请教jpeglib库在压缩存储jpeg图片的详细过程 jpeg库在压缩存储rgb数据时,是以压缩后的MCU为单位存储,还是以压缩后的一行rgb数据为单位存储? jpeg在压缩图片时不是以8x8的像素块(MCU也可能不是8x8)来编码的么,为什么它提供的 jpeg_write_scanlines()函数给人的感觉是压缩一行像素图,再把压缩后的数据存入文件中而不是存储一个压缩后的MCU.

大二狗求大神解决数据结构里压缩矩阵程序的问题,悬赏5c币!

问题描述 大二狗求大神解决数据结构里压缩矩阵程序的问题,悬赏5c币! 5C #include using namespace std;#define N 10typedef struct{ int ij; int e;}tsMatrix;typedef struct{ tsMatrix data[N];/*最大长度为N */ int munutu;}TSMatrix; int FastTransposeSMatrix(TSMatrix MTSMatrix T) // 快速转置{int colpq

数据结构循环队列存储问题

问题描述 数据结构循环队列存储问题 在具有n个存储单元的循环队里中,队满时有n-1个元素,还有一个元素用来存储什么? 解决方案 队列两端需要保留同一个元素,为了循环用 解决方案二: 队列为空时,队头FRONT与队尾REAR相等,作循环队列用时不能将其填满,因为满了的话REAR标志又与队头标志FRONT相等了,与队列为空时的标志一样,冲突了. 解决方案三: 摘一段网上说的,给你 n-1个 因为如果放置n个元素,首尾指针指向同一位置,与空队列无法区别,所以循环队列中认为当尾指针的后一个指针为首指针时

稀疏矩阵 压缩存储-将.off文件中的数据进行压缩存储,最好是做到与稀疏矩阵的压缩存储相关

问题描述 将.off文件中的数据进行压缩存储,最好是做到与稀疏矩阵的压缩存储相关 一个duck.off文件,327个点的坐标(x,y,z.double型数据),650个三角形连接信息.要求是把这些信息读入数组,并将这些数据进行压缩存储. 我想问的是:这些数据的压缩存储怎么样可以抽象成 稀 疏 矩 阵的压缩存储duck.off: OFF (文件格式为OFF) 327 650 0 (有327个顶点构成650个三角形) 539.697 -1035.28 317.708 (第一个顶点的xyz分量) ..

数据结构实践——操作用邻接表存储的图

本文是针对[数据结构基础系列(7):图]的实践. [项目 - 操作用邻接表存储的图] 假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大的一个顶点,输出该顶点编号: (3)计算图G中出度为0的顶点数: (4)判断图G中是否存在边<i,j>. 利用下图作为测试用图,输出结果. 提示:(1)分别设计函数实现算法:(2)不要全部实现完再测试,而是实现一个,测试一个:(3)请利用图算法库. [参考解答] #include <stdi

数据结构实践——稀疏矩阵相加

本文针对数据结构基础系列网络课程(5):数组与广义表的实践项目. [项目 - 稀疏矩阵相加] 采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法 提示1:两个行数.列数相同的矩阵可以相加 提示2:充分利用已经建立好的算法库解决问题 [参考解答1](程序中使用的头文件"tup.h"见稀疏矩阵的三元组表示算法库) #include <stdio.h> #include "tup.h" bool MatAdd(TSMatrix a,TSMatrix b,T