基于十字链表的矩阵运算
- 格式:doc
- 大小:415.00 KB
- 文档页数:36
数 据 结 构
课 程 设 计 报 告
日期: 年 月 日 122009 30 学 号
班 级 卫熙 姓 名
指 导 教 师 王 平 2007级信息与计算科学 20070744044 题目:基于正交链表的矩阵运算 1 说 明
本组成员名单:卫熙 谢武杰 孙洋洋 王帅 吴波
组长:卫熙
本人承担的课程设计的工作情况:
程序的算法设计以及部分功能实现,后期程序调试、测试,主函数的设计。
2 目 录
1 任务概述…………………………………………………………………………………… 3
1.1 问题描述…………………………………………………………………………… 3
1.2 编程的基本要求…………………………………………………………………… 3
1.3 程序的主要功能…………………………………………………………………… 3
1.4 编程语言及选择的操作平台……………………………………………………… 3
2 概要设计…………………………………………………………………………………… 4
2.1 数据结构…………………………………………………………………………… 4
2.2 总体结构…………………………………………………………………………… 4
3 详细设计…………………………………………………………………………………… 5
3.1 数据结构中的函数………………………………………………………………… 6
3.2 主函数及其他函数………………………………………………………………… 7
4 调试分析…………………………………………………………………………………… 9
4.1调试过程 …………………………………………………………………………… 9
4.2测试结果 …………………………………………………………………………… 9
4.2改进设想 …………………………………………………………………………… 14
5 用户手册…………………………………………………………………………………… 15
6 总结………………………………………………………………………………………… 17
参考文献……………………………………………………………………………………… 18
附件 源程序代码清单……………………………………………………………………… 19
3 1 任务概述
1.1 问题描述
应用三元组和正交链表存储稀疏矩阵,并实现稀疏矩阵的转置、加法和乘法运算。
1.2 编程的基本要求
1)应用三元组和正交链表的数据结构。
2)矩阵运算由正交链表类的成员函数实现,矩阵的输入输出由类的友元重载函数实现。
3)主函数用于实现菜单和调用。
1.3 程序的主要功能
1. 按《数据结构课程设计》报告格式所给出的框架撰写。
2. 具体内容应尽量包含文字叙述、图表(表格,框图,流程图,UML图等)和程序代码。
3. 每个同学要提交电子文档和一份打印稿。
1.4 编程语言及选择的操作平台
编程语言选用C++程序设计语言。
程序开发平台选用Mcrosoft Visual Studio 6.0的Microsoft Visual C++ 6.0开发环境。
程序运行在DOS界面。
4
2 概要设计
2.1 数据结构
稀疏矩阵类(matrix)
matrix
- Row : int
- Col : int
- Terms : int
- termrp : int
- headmode : node*
<> - operator >>( : istream, : matrix&) : istream
<> - operator <<( :ostream, :matrix) : ostream
+ matrix(m :int , n : int)
+ matrix()
+ matrix(T : matrix&)
+ ~matrix()
+ make Empty() : void
+ Insert(m : int, n :int, p : float) : void
+ pelete(m : int, n :int) : void
+ Locate(i : int) : node
+ transport() : matrix
+ Add(b :matrix) : matrix
+ Mul(b :matrix) : matrix
+ operator = (T : matrix&) : matrix
+ Init (m :int,n :int :void)
稀疏矩阵的节点类(node)
node
<> + matrix: class
+ node()
+ node( t : elemene*)
+ down : node*
+ right : node*
+ head : boolean
+ union
2.2总体结构
说明:表达式i!=0 True,向下执行,False 结束退出
5 表达式i!=0
输入所要执行的运算(i)
Switch(i)
结束 dafault Case 2 Case 1 Case 0 开始
Case 3
6
3 详细设计
3.1 数据结构中的函数(其中函数的实现请参看源代码部分)
1) 矩阵结点(matrix)中的函数:
Private:
friend istream&operator>>(istream&,matrix&);
friend ostream&operator<<(ostream&,matrix&);
//int Row,Col,Terms,temp; //矩阵的总行数,总列数,和非零元素个数和临时变量;
//node*headnode; //稀疏矩阵的总表头
public:
matrix(int m,int n); //重载构造函数
matrix(); //对矩阵进行构造
matrix(matrix& T); //拷贝构造函数
~matrix(){makeEmpty();} //析构函数
void Init(int m,int n); //初始化函数,又来初始化无参构造函数构造的矩阵
void makeEmpty(); //清空矩阵
void Insert(int m,int n,float p); //插入矩阵元素
void Delete(int m,int n); //删除特定行列元素
node *Locate(int i); //定位附加头结点
matrix transpose(); //矩阵的转置运算
matrix Add( matrix b); //两个矩阵相加
matrix Mul(matrix b); //两个矩阵相乘
matrix &operator=(matrix &T); //重载赋值号
2)节点类(node)的函数:
node():head(TRUE){ right=down=this;} //建立附加头结点
node(element *t)
{// 建立非零元素结点
triple.col=t->col; triple.row=t->row; triple.item=t->item; right=down=this; head=FALSE;}
7 3.2 主函数及其他函数
#include"matrix.h"
#include
void main()
{
int i;
matrix B,B1,B2,C;
while(i!=0)
{
cout<<" ----------------基于正交链表的稀疏矩阵的运算-----------------"<
cout<<" 1.转置 2.加法 3.乘法 0.退出程序 "<
cout<<"请选择:";
cin>>i; cout<
switch(i)
{
case 0: break;
case 1: cout<<" -------稀疏矩阵的转置------\n"<
cout<<"请输入矩阵:"<
cin>>B;
system("cls");
cout<<"原矩阵为:"<
cout<
cout<<"转置后为"<
cout<
case 2: cout<<" --------稀疏矩阵的加法-------\n"<
cout<<"请输入矩阵1:"<
cin>>B1;
cout<<"请输入矩阵2:"<
cin>>B2;
8 system("cls");
cout<<"矩阵1为:"<
cout<
cout<<"矩阵2为:"<
cout<
cout<<"两个矩阵之和为:"<
cout<
break;
case 3: cout<<" --------稀疏矩阵的乘法-------\n"<
cout<<"注意:输入的矩阵必须满足矩阵相乘的条件,并且按顺序输入(即1和2的顺序)\n"<
cout<<"请输入矩阵1:"<
cin>>B1;
cout<<"请输入矩阵2:"<
cin>>B2;
system("cls");
cout<<"矩阵1为:"<
cout<
cout<<"矩阵2为:"<
cout<
cout<<"两个矩阵之积为:"<
cout<
break;
default:
break;
}
if(i!=0)
{
cout<<"按任意继续......"<
}