山东大学-数据结构实验报告-矩阵和散列表
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
山东大学计算机科学与技术学院数据结构课程实验报告
了Input函数和Output函数。
对问题三,仿课本所述,定义Term类作为SparseMatrix类的友元类,包含行、列、值三个要素的成员变量,用Term类的数组实现稀疏矩阵的行主映射存储。
查找行为的实现方式是,找到位于目标元素前一行的最后一个元素,再从这个元素开始向下搜索,直到找到和目标元素同一行但是列数小于目标元素的元素a[k-1],然后决定下一步的行为————插入一个新项Term作为a[k]并将已有元素向后移位,还是修改已存在的项a[k]。
以此原理编写了Store和Retrieve函数,并扩展编写了Input函数和Output函数。
对问题四,仿照课本例子编写了有序链表类SortedChain、开放寻址的散列表类HashTable、基于有序链表链接的散列表类ChainHashTable,并对这三个类分别扩展编写了Output函数。
3.测试结果(测试输入,测试输出)
问题一:
问题二:
上图显示了输入不符合下三角方阵约束时,抛出异常并退出程序。
上图是正常运行的结果。
问题三:
普通的输入和输出操作如下:
矩阵相加:
矩阵转置:
问题四:
以上图的数据为例。
从346就应该在链表链接的散列表上看到开放寻址解决冲突的例子。
返回开放寻址的输出段,可以看到符合预期的结果:
4.实现源代码(程序风格清晰易理解,有充分的注释)
/*
* TridiagonalMatrix.h
*
* Created on: Nov 22, 2015
* Author: xudp
*/
#ifndef TRIDIAGONALMATRIX_H_
#define TRIDIAGONALMATRIX_H_
#include<iostream>
using namespace std;
template<class T>
class TridiagonalMatrix {
public:
// 1、创建三对角矩阵类,采用按列映射方式,提供 store 和 retrieve 方法。
TridiagonalMatrix(int size = 10);
~TridiagonalMatrix();
// row>0, column>0
TridiagonalMatrix<T>& Store(int row, int column, const T& value);
T Retrieve(int row, int column);
void Input(istream& in, ostream& out);
void Output(ostream& out) const;
friend ostream& operator<< (ostream& out, const
TridiagonalMatrix<T>& matrix){
matrix.Output(out);
return out;
}
friend istream& operator>> (istream& in, TridiagonalMatrix<T>& matrix){
matrix.Input(in, cout);。