班级:信息1102 姓名:贾孟涛
========实习报告七“稀疏矩阵的三元组存储”演示程序==================
(一)、程序的功能和特点
该程序可以建立稀疏矩阵的三元组存储,可以键盘输入所要存储的稀疏矩阵,能将输入的稀疏矩阵显示输出。该程序的特点是采用java面向对象语言,将三元组和稀疏矩阵用类进行封装。且能方便的储存稀疏,方便的显示稀疏矩阵。
(二)、程序的算法设计
算法一:“进栈出栈”算法:
1.【逻辑结构与存储结构设计】
逻辑结构:线性结构。
存储结构:顺序存储结构。
2.【基本操作设计】
稀疏矩阵基本算法:
建立单位子矩阵类,用来存储相应的数据。每次添加时,将会由系统编辑对应的稀疏矩阵的行数、列数然后添加非零元素数,直到将整个矩阵填满。
3.【算法设计】
文字说明:
(1).首先输出稀疏矩阵的行数和列数。
(2).在通过for循环依次访问该稀疏矩阵的每一个元素,比较行号和列号,如果行号和列号和三元组所存储的相同,则输出其值;
(3).如果不相同或三元数组没有储存则该元素值为零;
(4).输出结束。
4.【高级语言代码】
//显示输出稀疏矩阵
void display(){
int i,j,k;
System.out.println("稀疏矩阵的行数 "+Rows);
System.out.println("稀疏矩阵的列数 "+Cols);
//按先行后列顺序输出矩阵
for(i=0;i for(j=0;j for(k=0;k if(i==smArray[k].row&&j==smArray[k].col){ System.out.print(" "+smArray[k].value); break; //打断k循环 } if(k==Terms) System.out.print("0 "); } System.out.println(); //换行 } } (三)、程序中类的设计 “Trituple”类: 1.【逻辑结构与存储结构】 逻辑结构:线性结构。 存储结构:顺序存储结构。 2.【主要成员变量说明】 public int row; //非零元素行号 public int col; //非零元素列号 public float value; //非零元素的值 3.【主要成员方法说明】 public Trituple(int r,int c,float v) //为Trituple类的构造函数。该构造函数有三个参数,分别为该非零三元组的行号列号和元素的值。 4.【高级语言代码】 class Trituple { //三元组类 Trituple public int row; //非零元素行号/列号 public int col; public float value; //非零元素的值 public Trituple(int r,int c,float v){ row=r;col=c;value=v; } } “SparseMatrix”类: 1.【逻辑结构与存储结构】 逻辑结构:线性结构。 存储结构:顺序存储结构。 2.【主要成员变量说明】 //稀疏矩阵的行数/列数/非零元素数 int Rows,Cols,Terms; //动态分配结构体数组(三元组表) public Trituple smArray[]; 3.【主要成员方法说明】 //稀疏矩阵的初始化 public SparseMatrix(int MaxRow,int MaxCol,int MaxTerms) //显示输出稀疏矩阵 void display() 4.【高级语言代码】 //定义稀疏矩阵类SparseMatrix public class SparseMatrix { //稀疏矩阵的行数/列数/非零元素数 int Rows,Cols,Terms; //动态分配结构体数组(三元组表) public Trituple smArray[]; //构造函数:稀疏矩阵的行数/列数/非零元素数 public SparseMatrix(int MaxRow,int MaxCol,int MaxTerms) { //稀疏矩阵的初始化 Rows=MaxRow; Cols=MaxCol; Terms=MaxTerms; smArray=new Trituple[MaxTerms]; //三元组表 int r=0,c=0; float v=0.0f; for(int i=0;i System.out.println("非零元素的行号"); try { /* 键盘接受整数 */ BufferedReader br=new BufferedReader( new InputStreamReader(System.in)); r=Integer.parseInt(br.readLine()); } catch(IOException e){} System.out.println("非零元素的列号"); try { /* 键盘接受整数 */ BufferedReader br=new BufferedReader( new InputStreamReader(System.in)); c=Integer.parseInt(br.readLine()); } catch(IOException e){} System.out.println("非零元素的值"); try { /* 键盘接受float数 */ BufferedReader br=new BufferedReader( new InputStreamReader(System.in)); v=Float.parseFloat(br.readLine()); } catch(IOException e){} Trituple tmp=new Trituple(r,c,v); //构成一行 smArray[i]=tmp; //加入表中 } } //显示输出稀疏矩阵 void display(){ int i,j,k; System.out.println("稀疏矩阵的行数 "+Rows); System.out.println("稀疏矩阵的列数 "+Cols); //按先行后列顺序输出矩阵 for(i=0;i for(j=0;j for(k=0;k if(i==smArray[k].row&&j==smArray[k].col){ System.out.print(" "+smArray[k].value); break; //打断k循环 } if(k==Terms) System.out.print("0 "); } System.out.println(); //换行 } } //主函数 public static void main(String args[]){ SparseMatrix s1=new SparseMatrix(5,4,6); s1.display(); } } //稀疏矩阵类SparseMatrix结束 (四)、程序的输入输出和运行结果截屏 运行结果如下图所示