• 第四章学习小结心得


    一、知识小结

               

    (懒得用键盘敲,手写)

    二、解题心得体会

    题目:实践——7-1 稀疏矩阵

     稀疏矩阵的压缩存储方式:三元组,十字链表

    #define MAX 500
    typedef int datatype;
    typedef struct{       //定义三元组类型
        int i, j;      //存储非零元素的行标和列标  
        datatype e;    //非零元素值
    }SPNode;    
    typedef struct{
        int mu, nu, tu;    //矩阵的行、列和非零元素个数
        SPNode data[MAX];    //三元组表
    }SPNode;
    三元组
    typedef struct OLNode{
        int i, j;    //行标、列标
        datatype e;    //非零元素的值 
        struct OLNode *right, *down;    //指针域 
    }OLNode, *OLink;
    typedef struct{
        OLink *Rhead, *Chead;
        int mu, nu, tu;    //稀疏矩阵的行数、列数、非零元个数 
    }CrossList; 
    十字链表

    以下为正确答案的代码:

    #include<iostream>
    using namespace std;
    
    #define MAX 500
    typedef struct Matrix{
        int row[MAX], col[MAX]; //一维数组存储非零元素的行标、列标
        int e[MAX]; //一维数组存储非零元素的值
    }Matrix;
    
    
    int main()
    {
        Matrix M;
        int m, n, N, t[MAX][2];
        cin >> m >> n >> N;
        
        int i(0), j(0), k;
        for(k=0; k<N; k++)
        {
            cin >> M.row[i] >> M.col[j] >> M.e[k];
            t[k][0] = M.row[i];    t[k][1] = M.col[j];
            i++;    j++;
        }
        
        int x;
        cin >> x;
        for(k=0; k<N; k++)
        { //遍历比对法
                if(x==M.e[k]){  //输出元素的位置后退出循环
                cout << t[k][0] <<" "<< t[k][1];
                break;
            }
        }
        if(k==N)    cout <<"ERROR"; //k不存在
        return 0; 
    }
    C++思想层次的解法

    上述代码是基于C++基础之上编写出的代码,主函数没有足够的接口,导致主函数冗余,可读性不强,以下为改进后的代码:

    #include<iostream>
    using namespace std;
    
    #define MAX 500
    typedef int ElemType;
    typedef struct
    {
        int row;        //行号
        int col;        //列号
        ElemType d;     //元素值
    } TupNode; //三元组定义
    //定义三元组线性表存储结构
    typedef struct
    {
        int rows;                   //行数值
        int cols;                   //列数值
        int nums;                   //非零元素个数
        TupNode data[MAX];      //data数据域
    } TSMatrix; //三元组顺序表定义
    
    void CreateMat(TSMatrix &t, int m, int n, int N)
    { //创建一个有m行n列N个非零元素的稀疏矩阵t, 
        t.rows = m;        t.cols = n;        t.nums = N;
        int i(0), j(0);
        for(i; i<N; i++)
            cin >> t.data[i].row >> t.data[i].col >> t.data[i].d;
    }
    
    void Research(TSMatrix &t, int x, int N)
    { //在含有N个非零元素的矩阵t中寻找元素x,
        //若查找成功,则输出所在的行数和列数
        //若查找失败,则输出“ERROR” 
        int i;
        for(i=0; i<N; i++)
        {
            if(x==t.data[i].d)
            {
                cout << t.data[i].row <<" "<< t.data[i].col;
                break;
            }
        }
        if(i==N)
            cout <<"ERROR";
    }
    int main()
    {
        TSMatrix t;
        int m, n, N;
        cin >> m >> n >> N;
        CreateMat(t, m, n, N);
        
        int x;
        cin >> x;
        Research(t,x,N);
        return 0; 
    }
    修改过后的程序

    矩阵在线性代数中是一个表,在C++中是二维数组,在数据结构中又可以被压缩为一维数组。

    同一个知识点,在不同的学习阶段可以有不同的理解,学习的进展越深,越接近其本质,或许这就是循序渐进的学习奥义吧。

  • 相关阅读:
    双态运维分享之:业务场景驱动的服务型CMDB
    双态运维分享之二: 服务型CMDB的消费场景
    双态运维:如何让CMDB配置维护更贴近人性
    CMDB经验分享之 – 剖析CMDB的设计过程
    APM最佳实践: 诊断平安城市视频网性能问题
    先定一个运维小目标,比方监控它10000台主机
    大规模Docker平台自动化监控之路
    少走冤枉路!带你走过SNMP的那些坑
    完整性约束
    数据类型
  • 原文地址:https://www.cnblogs.com/yuanchuying/p/10708305.html
Copyright © 2020-2023  润新知