`
bulote
  • 浏览: 1385735 次
文章分类
社区版块
存档分类
最新评论

实训C++语言设计——稀疏矩阵SparseMatrix

 
阅读更多

平台:VC++ 2005 测试通过!
.vcproj
这是使用应用程序向导生成的 VC++ 项目的主项目文件。
它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。
StdAfx.h, StdAfx.cpp
这些文件用于生成名为 twod.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。
这些都是使用应用程序向导生成的 VC++ 文件故不列出
我只列出程序主要部分!

//ADT_SparseMatrix.h

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

//---------------抽象数据类型稀疏矩阵的定义------------------//
#define ElemMaxSize 12500;
typedef int ElemType;
typedef struct {
int i, j;
ElemType e;
} Triple; //稀疏矩阵的元素-三元组

typedef struct {
vector<Triple> elems;
int row, col, tu;
} TSMatrix; //稀疏矩阵结构体类型


//---------------------稀疏矩阵的接口函数声明-----------------------//
//构造一个稀疏矩阵
bool enterTSMatrix(TSMatrix &atsm);
//释放稀疏矩阵所占内存空间
void DestroyTSMatrix(TSMatrix &atsm);
//打印稀疏矩阵
void Print(const TSMatrix &atsm);
//对稀疏矩阵进行转置
bool TranposeTSMatrix(const TSMatrix &stsm, TSMatrix &ttsm);

//------私有的成员函数-----//
bool rowmajorCriterion(const Triple& t1, const Triple& t2);
ElemType getTriple(const TSMatrix &stsm, int ix, int jx);

//---------------------稀疏矩阵的接口函数的实现-----------------------//
bool enterTSMatrix(TSMatrix &atsm){
cout << "请输入矩阵的行数: "; cin >> atsm.row;
cout << "请输入矩阵的列数: "; cin >> atsm.col;
cout << "请输入矩阵的非零元数: "; cin >> atsm.tu;
int ix, jx; ElemType elem;
for(int i = 0; i < atsm.tu; i++){//接受atsm.tu个非零元
Triple aTriple;
cout << "请输入第" << i <<"个非零元: ";
cin >> ix >>jx >>elem;
aTriple.i = ix; aTriple.j = jx; aTriple.e = elem;
atsm.elems.push_back(aTriple);
}
vector<Triple>::iterator first = atsm.elems.begin();
vector<Triple>::iterator last = atsm.elems.end();
sort(first, last, rowmajorCriterion);
/*for(int i = 0; i < atsm.tu; i++){
cout <<"<"<< atsm.elems[i].i <<", "
<< atsm.elems[i].j <<", "
<< atsm.elems[i].e <<">";
cout <<endl;
}*/
return true;
}

void DestroyTSMatrix(TSMatrix &atsm){

}

void Print(const TSMatrix &atsm){
//能否漂亮打印??
if (!atsm.elems.empty()){
for(int r = 1; r <= atsm.row; r++){
for(int c = 1; c <= atsm.col; c++)
cout << getTriple(atsm, r, c) <<" ";
cout <<endl;
}
}
}

bool TranposeTSMatrix(const TSMatrix &stsm, TSMatrix &ttsm){
ttsm.row = stsm.col; ttsm.col = stsm.row; ttsm.tu = stsm.tu;
if(!ttsm.elems.empty()) //清空目标矩阵的三元组表
ttsm.elems.clear();
if (ttsm.tu){//如果有非零元
for (int c = 1; c <= stsm.col; c++){
for (int tx = 0; tx < stsm.tu; tx++)
if (stsm.elems[tx].j == c ){
Triple aTriple;
aTriple.i = stsm.elems[tx].j;
aTriple.j = stsm.elems[tx].i;
aTriple.e = stsm.elems[tx].e;
ttsm.elems.push_back(aTriple);
}
}//end of for
}
return true;
}

bool rowmajorCriterion(const Triple& t1, const Triple& t2){
if( (t1.i < t2.i) ) return true;
if( (t1.i == t2.i) && (t1.j < t2.j) ) return true;
return false;
}

ElemType getTriple(const TSMatrix &atsm, int ix, int jx){
for (int i = 0; i < atsm.tu; i++){
if ((atsm.elems[i].i == ix)&&(atsm.elems[i].j == jx)){
exit;
return atsm.elems[i].e;
}
}
return 0;//呵呵,有点问题,自己解决.
}

// ADT_SparseMatrix.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "SparseMatrix.h"

int _tmain(int argc, _TCHAR* argv[])
{
TSMatrix m, n;
enterTSMatrix(m);
Print(m);
TranposeTSMatrix(m,n);
cout << "m的转置矩阵是:"<<endl;
Print(n);
return 0;
}

分享到:
评论

相关推荐

    稀疏矩阵的C++实现--课程设计

    在本课程设计中,我们将深入探讨稀疏矩阵的C++实现,旨在理解和应用这种数据结构来优化存储和计算性能。 稀疏矩阵的核心思想是只存储非零元素,避免浪费内存空间在大量的零元素上。常见的存储方法有两种:三元组...

    稀疏矩阵的C++实现

    设计一个稀疏矩阵类`SparseMatrix`,包含构造函数、析构函数、添加元素、删除元素、矩阵加法、乘法等成员函数。例如,成员函数`addElement`用于添加非零元素: ```cpp class SparseMatrix { public: void ...

    数据结构C++ 稀疏矩阵 源代码

    ### 数据结构C++稀疏矩阵源代码解析 #### 一、引言 在计算机科学领域,数据结构的设计与实现对于优化程序性能具有重要意义。稀疏矩阵作为一种常见的数据结构,在处理大部分元素为零的大规模矩阵时尤其有用。通过...

    用C++实现稀疏矩阵

    在计算机科学中,稀疏矩阵(Sparse Matrix)是一种特殊的矩阵表示形式,主要应用于处理大量元素为零的矩阵。由于实际应用中,很多矩阵大部分元素可能是零,存储和运算这些元素会浪费大量的空间和时间。因此,为了...

    稀疏矩阵 c++ 三元组表

    在这个项目中,开发者可能设计了一个窗体应用程序,用户可以输入稀疏矩阵的非零元素,程序将其存储为三元组表并进行相应的矩阵操作,如加法、乘法等。 总结,稀疏矩阵通过三元组表的存储方式在处理大量零元素的矩阵...

    稀疏矩阵 c++

    在C++中实现稀疏矩阵,我们可以采用三元组(Triplet)数组或压缩存储(Compressed Row Storage, CRS)的方式来节省空间。下面将详细介绍稀疏矩阵的概念、创建、删除、加减等操作,并展示C++实现的方法。 **稀疏矩阵...

    稀疏矩阵加减乘C++实现

    在计算机科学中,稀疏矩阵(Sparse Matrix)是一种用于存储大量零元素的矩阵表示方法,主要应用于处理数据稀疏的情况,比如大型图形处理、线性代数运算等。相较于传统矩阵,稀疏矩阵能有效节省内存空间并提高计算...

    稀疏矩阵 的 加减乘除 运算

    然后,编写相应的函数来执行上述运算,例如`SparseMatrix Add(SparseMatrix &m1, SparseMatrix &m2)`、`SparseMatrix Subtract(SparseMatrix &m1, SparseMatrix &m2)`、`SparseMatrix Multiply(SparseMatrix &m1, ...

    稀疏矩阵及其相关实现

    2. **SparseMatrix 类**:实现稀疏矩阵的基本功能,包括初始化、转置、相乘和相加等操作。 ```cpp template class Trituple { public: int row, col; T value; void set(int r, int c, T v) { row = r; col = c...

    C实现稀疏矩阵抽象数据类型

    因此,为了提高效率,我们需要设计一种高效的数据结构来存储和操作这些稀疏矩阵。在C语言中实现稀疏矩阵的抽象数据类型(ADT)是一项重要的任务,下面将详细介绍这一主题。 首先,我们需要理解稀疏矩阵的基本概念。...

    数据结构实验-稀疏矩阵计算器

    《数据结构实验——稀疏矩阵计算器的实现与解析》 在计算机科学中,数据结构是组织和管理数据的重要工具,而稀疏矩阵是处理大量零元素的矩阵时的一种高效表示方式。本实验“数据结构实验-稀疏矩阵计算器”正是基于...

    解稀疏矩阵

    稀疏矩阵是线性代数中的一个重要概念,特别是在处理大规模数据时,往往会出现大部分元素为零的矩阵。这种矩阵在存储和计算上如果按照常规方式处理,会浪费大量资源。因此,稀疏矩阵的存储结构和算法优化对于提高计算...

    数据结构课程设计稀疏矩阵相加与相乘

    在处理大型矩阵时,如果大部分元素为零,我们通常会使用一种特殊的数据结构——稀疏矩阵(Sparse Matrix)来优化存储空间和计算效率。本篇文章将详细探讨“稀疏矩阵相加与相乘”的相关知识点。 稀疏矩阵是指那些大...

    数据结构C++稀疏矩阵实现加减

    综上所述,稀疏矩阵在C++中的实现主要涉及选择合适的数据结构、存储非零元素的位置和值,以及设计高效的操作方法。通过理解和掌握这些知识点,不仅可以提高编程效率,还能为处理大规模数据提供有效手段。对于学习...

    C++ 实现稀疏矩阵的压缩存储的实例

    在 test 函数中,我们使用了一个名为 a 的二维数组来初始化稀疏矩阵,然后使用 SparseMatrix 类来实现稀疏矩阵的压缩存储。最后,我们使用 Display 函数来显示稀疏矩阵的内容。 本文详细讲解了C++ 实现稀疏矩阵的...

    数据结构 三元组 稀疏矩阵

    "SparseMatrix.cpp"和"SparseMatrixDrive.cpp"可能包含了稀疏矩阵类的实现和驱动程序,而"MatrixTerm.cpp"和"MatrixTerm.h"则可能分别对应于矩阵项类的实现和接口定义。 在"MatrixTerm"类中,我们可能找到表示单个...

    稀疏矩阵转置,乘法,输入输出

    在《SparseMatrix1》这个文件中,很可能包含了C++实现的稀疏矩阵类,包括上述的功能:输入输出、转置和乘法等。代码可能使用了STL容器和算法,以及自定义的迭代器或函数对象来提高效率。通过阅读和理解这个代码,...

    数据结构-稀疏矩阵实现

    稀疏矩阵(Sparse Matrix)是一种特殊的数据结构,用于高效地表示和处理大量元素为零的矩阵。在常规矩阵中,所有元素都被存储,但在稀疏矩阵中,只存储非零元素,以减少内存占用和提高计算效率。 ### 稀疏矩阵的...

    chengfa.rar_稀疏_稀疏矩阵

    在计算机科学领域,稀疏矩阵(Sparse Matrix)是一种在大量元素为零的矩阵中非常有用的数据结构。这种矩阵的特点是大部分元素为零,而非零元素相对较少。在处理大规模问题时,如图形学、线性代数求解、网络分析等,...

    稀疏矩阵加减乘运算

    稀疏矩阵是处理大型矩阵时的一种高效数据结构,尤其在处理大部分元素为零的情况。它主要存储非零元素,从而节省存储空间并提高计算效率。本文将深入探讨稀疏矩阵的加法、减法和乘法运算,以及如何在VC6.0环境下实现...

Global site tag (gtag.js) - Google Analytics