Introduction

ADT示例

向量vector容器

template<class ELEM>
class vector
//向量 类模板vector,模板参数ELEM。当程序使用此模板时,应该在前面附加 #include<vector>
{
    /*1 向量的取值类型
    它的元素类型为ELEM,k个元素的顺序存储成为一个向量
    vector<double> v(100);用于声明元素为浮点数的一个向量v,
    程序中创建一个向量就是用这种格式的语句,其中
    double替换了模板参数ELEM,向量长度k就确定为100;
    如果创建整型向量,那就用<int>替换模板参数

    2 用名字访问,即使用变量访问向量及其元素的方法
    用整型变量i表示向量的下标,用v[i]访问向量的第i个元素,用语句v=w;
    可以将同型的向量w拷贝到向量v,用相等算子v==w可以比较两个向量的值是否全同

    3 私有变量和运算集
    */
    private: //不主张涉及到private成员
    ELEM *v[];  //私有变量,存储向量元素
    int maxLength; //向量最大长度
    int currenSize;  //向量当前长度

    public:
    //创建函数有三个:
    vector<ELEM> v; //创建一个长度为0的向量
    vector<ELEM> v(K);  //创建一个长度为k的向量
    vector<ELEM> v(k,value); //创建一个长度为k的向量,其元素的初值全部为value
    int size(); //函数v.size()将返回整数,向量的当前长度 
    //还可以定义其他类似size的函数,如两个向量的加法、乘法等
}

二维矩阵容器matrix

template<class ELEM>
class matrix //二维矩阵类模板matrix,模板参数ELEM
//当程序使用此matrix模板时,应该在前面附加 #include<vector>以及 #include<matrix>
{
    /*1 二维矩阵的取值类型:
    它的k个元素组成行向量,然后用k个行向量组二维矩阵,用matrix<double> M(100);
    声明一个浮点数的k*k的矩阵M。程序中创建一个二维矩阵就可以用这样的语句
    其中double替换了模板参数ELEM,矩阵的各维的长度k=100;
    2 用名字访问,即使用变量访问矩阵及其元素的方法
    用整型变量i表示下标,用M[i]访问矩阵的第i行,用语句M[i]=M[j];可以将矩阵的第j行
    拷贝到第i行
    3 私有变量和运算集
    */
   typedef vector<ELEM> Mrow;
   typedef vector<ELEM> Mmatrix;
   private:
   Mmatrix amatrix; //私有变量,存储一个二维矩阵
   int maxLength;  //存储各维的尺度
   public:
   //创建函数有3个:
   Mmatrix<ELEM> m; //创建一个二维矩阵,尺寸待定
   Mmatrix<ELEM> m(k); // 创建一个k*k的二维矩阵
   // 创建k*k的二维矩阵
   Mmatrix<ELEM> m(k,value);
   //其元素的初值全部为value
   int v.size(); //返回函数值为矩阵的当前长度,可以补充定义其他函数
}

算法

算法的渐进分析示例-矩阵求和(matrix_addition)

void matrix_addition(double **M1,double **M2,int k)
{
    //矩阵M1,M2求和,即两两元素求和,结果存回M1,k*k是矩阵的规模
    for (int i=0;i<k;i++)
        for(int j=0;j<k;j++)
            M1[i][j] = M1[i][j] + M2[i][j];  //对应位置的矩阵元素相加
}

最好、最坏和平均情况——求矩阵M中绝对值最大的元素

double abs_biggest(double **M,int k)
{
    //求矩阵M中绝对值最大的元素,K*k是矩阵的规模
    double current_big = 0; //临时存储单元,初始化为0
    for (int i = 0;j<k;j++)
         for (int j = 0;i<k;j++){ //对每一个矩阵元素进行大小比较
            double temp = fabs(M[i][j]);
            if (temp > current_big)
                current_big = temp; // current_big存储当前最大者
         }
    return current_big; //函数值返回
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花花橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值