栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构学习笔记:二维数组和矩阵乘法

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构学习笔记:二维数组和矩阵乘法

静态数组 一、定义

二维数组定义的一般形式如下:

type arrayName [ x ][ y ];

typedef struct TwoDStaticArrray
{
    int rows;
    int columns;
    int elements[ROWS][COLUMNS];
} TwoDStaticArray, *TwoDStaticArrayPtr;

二、初始化 

 TwoDStaticArrayPtr initTwoDStaticArray()
{
    int i, j;
    TwoDStaticArrayPtr resultPtr = (TwoDStaticArrayPtr)malloc(sizeof(TwoDStaticArray));
    resultPtr->rows = ROWS;
    resultPtr->columns = COLUMNS;
    for(i = 0; i < ROWS; i ++)
    {
        for(j = 0; j < COLUMNS; j ++)
        {
            resultPtr->elements[i][j] = i * 10 + j;
            //打印地址 
            printf("(%d, %d): %d; ", i, j, &(resultPtr->elements[i][j]));
        }
    }
    
    return resultPtr;
}

三、实现结果

 静态矩阵:
(0, 0): 10950072; (0, 1): 10950076; (0, 2): 10950080; (0, 3): 10950084; (0, 4): 10950088; (1, 0): 10950092; (1, 1): 10950096; (1, 2): 10950100; (1, 3): 10950104; (1, 4): 10950108; (2, 0): 10950112; (2, 1): 10950116; (2, 2): 10950120; (2, 3): 10950124; (2, 4): 10950128; (3, 0): 10950132; (3, 1): 10950136; (3, 2): 10950140; (3, 3): 10950144; (3, 4): 10950148; 

 动态数组 一、定义

typedef struct TwoDArray
{
    int rows;
    int columns;
    int** elements;
 } TwoDArry, *TwoDArrayPtr;

二、初始化 

 TwoDArrayPtr initTwoDArray(int paraRows,int paraColumns)
{
    int i;
    TwoDArrayPtr resultPtr = (TwoDArrayPtr)malloc(sizeof(struct TwoDArray));
    resultPtr->rows = paraRows;
    resultPtr->columns = paraColumns;
    resultPtr->elements = (int**)malloc(paraRows * sizeof(int*));
    for(i = 0;i < paraRows;i++)
    {
        resultPtr->elements[i] = (int*)malloc(paraColumns * sizeof(int));
    }
    return resultPtr;
}

三、打印 

void printTwoDArray(TwoDArrayPtr paraPtr)
{
    int i,j;
    for(i = 0;i < paraPtr->rows;i++)
    {
        for(j = 0;j < paraPtr->columns;j++)
        {
            if(j == paraPtr->columns-1)
                printf("%d ",paraPtr->elements[i][j]);
            else
                printf("%d, ",paraPtr->elements[i][j]);
        }
        printf("n");
    }
 } 

四、随机数赋值 

void randomizeTwoDArray(TwoDArrayPtr paraPtr,int paraLowerBound,int paraUpperBound)
{
    int i,j;
    for(i = 0;i < paraPtr->rows;i++)
    {
        for(j = 0;j < paraPtr->columns;j++)
        {
            paraPtr->elements[i][j] = rand() % (paraUpperBound - paraLowerBound) + paraLowerBound;
        }
    }
 } 

矩阵相乘 

矩阵相乘的算法比较简单,输入一个m*n矩阵和一个n*p矩阵,结果必然是m*p矩阵,有m*p个元素

 矩阵乘法公式:

一、代码

 TwoDArrayPtr matrixMultiply(TwoDArrayPtr paraPtr1,TwoDArrayPtr paraPtr2)
{
    int i,j,k,sum;
    if(paraPtr1->columns != paraPtr2->rows)
    {
        printf("矩阵不能相乘.n");
        return NULL;
    }
    TwoDArrayPtr resultPtr = initTwoDArray(paraPtr1->rows,paraPtr2->columns);
    for(i = 0;i < paraPtr1->rows;i++)
    {
        for(j = 0;j < paraPtr2->columns;j++)
        {
            sum = 0;
            for(k = 0;k < paraPtr1->columns;k++)
            {
                sum += paraPtr1->elements[i][k] * paraPtr2->elements[k][j];
            }
            resultPtr->elements[i][j] = sum;
            if(j == paraPtr2->columns-1)
                printf("sum = %d",sum);
            else
                printf("sum = %d, ",sum);
        }
        printf("n");
    }
    return resultPtr;
 } 

二、测试和结果 

void twoDArrayTest()
{
    TwoDArrayPtr tempPtr1, tempPtr2, tempPtr3;
    tempPtr1 = initTwoDArray(3, 2);
    randomizeTwoDArray(tempPtr1, 1, 6);
    printf("第一个矩阵:rn");
    printTwoDArray(tempPtr1);
 
    tempPtr2 = initTwoDArray(2, 4);
    randomizeTwoDArray(tempPtr2, 4, 10);
    printf("第二个矩阵:rn");
    printTwoDArray(tempPtr2);
 
    tempPtr3 = matrixMultiply(tempPtr1, tempPtr2);
    printf("计算结果:rn");
    printTwoDArray(tempPtr3);
}

第一个矩阵:
2, 3
5, 1
5, 5
第二个矩阵:
4, 4, 8, 6
9, 9, 5, 7
sum = 35, sum = 35, sum = 31, sum = 33
sum = 29, sum = 29, sum = 45, sum = 37
sum = 65, sum = 65, sum = 65, sum = 65
计算结果:
35, 35, 31, 33
29, 29, 45, 37
65, 65, 65, 65

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/916879.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号