基于十字链表的矩阵运算

  • 格式: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<<"按任意继续......"<

}