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; //函数值返回
}