山东大学数据结构实验报告四Word格式文档下载.docx
《山东大学数据结构实验报告四Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《山东大学数据结构实验报告四Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
![山东大学数据结构实验报告四Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/28/a3a1e9f3-7027-46a0-bcfa-726192da57b6/a3a1e9f3-7027-46a0-bcfa-726192da57b61.gif)
boolInsert(intk);
boolSearch(intk);
voidprint();
private:
intd;
ChainHashTableNode*ht;
};
ChainHashTableNode.cpp
#include"
ChainHashTable.h"
#include<
iostream>
ChainHashTable:
:
ChainHashTable(intdivisor)
d=divisor;
ht=newChainHashTableNode[d];
}
boolChainHashTable:
Insert(intk)
intj=k%d;
if(ht[j].Insert(k))
{
returntrue;
}
else{
returnfalse;
voidChainHashTable:
print()
for(inti=0;
i<
d;
i++)
ht[i].print();
Node.h"
classChainHashTableNode
ChainHashTableNode();
Node*first;
#include<
ChainHashTableNode:
ChainHashTableNode()
first=0;
boolChainHashTableNode:
Search(intk)
if(first==0)returnfalse;
Node*current=first;
while(current)
if(current->
value==k)
{
returntrue;
}
current=current->
link;
if(current)
if(current->
{
returntrue;
}
returnfalse;
if(Search(k))
cout<
<
"
已经存在此元素"
<
endl;
else{
Node*p=newNode();
p->
value=k;
if(first==0)
first=p;
else
p->
link=first;
voidChainHashTableNode:
if(first)
while(first)
cout<
first->
value<
;
first=first->
first=current;
-1<
HashTable.h
classHashTable
HashTable(intdivisor);
~HashTable();
intSearch(intk);
//搜索算法
boolInsert(inte);
inthSearch(intk);
//除数
int*ht;
//桶,大小取决于d就是除数是多少
bool*empty;
//一维数组,用来存储第I个桶是否存入了元素
HashTable.cpp
HashTable.h"
HashTable:
HashTable(intdivisor)
ht=newint[d];
empty=newbool[d];
empty[i]=true;
ht[i]=0;
~HashTable()
delete[]ht;
delete[]empty;
intHashTable:
hSearch(intk)//搜索值为K的元素
inti=k%d;
intj=i;
do{
if(ht[j]==k||empty[j])returnj;
j=(j+1)%d;
}while(j!
=i);
returnj;
Search(intk)//搜索值为K的元素
intb=hSearch(k);
if(ht[b]==k)returnb;
return-1;
boolHashTable:
Insert(inte)
intb=hSearch(e);
if(empty[b])
ht[b]=e;
empty[b]=false;
elseif(ht[b]==e)
else
表已经满了"
voidHashTable:
961;
i++){
ht[i]<
cout<
return;
LowerTriangularMatrix.h
classLowerTriangularMatrix
LowerTriangularMatrix(intsize);
voidStore(intx,inti,intj);
//向矩阵里存储一个元素
intRetrieve(inti,intj);
//返回矩阵中的一个元素
intn;
//矩阵维数
intsum;
//矩阵非零元素个数
int*t;
//用数组来存储矩阵
LowerTriangularMatrix.cpp
LowerTriangularMatrix.h"
LowerTriangularMatrix:
LowerTriangularMatrix(intsize)
n=size;
sum=n*(n+1)/2;
t=newint[sum];
voidLowerTriangularMatrix:
Store(intx,inti,intj)
if(i<
0||j<
0||i>
=n||j>
=n)
下三角矩阵行列输入错误"
j<
return;
elseif(x==0)
下三角所添加的元素必须非零"
elseif(i<
j)
下三角添加元素位置错误"
t[sum-((n-j)*(n-j+1)/2)+(i-j)]=x;
intLowerTriangularMatrix:
Retrieve(inti,intj)
=(n-1)||j>
=(n-1))
三对角矩阵行列输入错误"
return-1;
elseif(i>
=j)
returnt[sum-((n-j)*(n-j+1)/2)+(i-j)];
return0;
sum;
t[i]<
Node.h
classNode
friendclassChainHashTableNode;
intvalue;
Node*link;
Node.cpp
SparseMatrix.h
Term.h"
classSparseMatrix
SparseMatrix(introw,intcol);
voidtranspose();
voidAdd(SparseMatrix&
b);
//两个稀疏矩阵相加
introw,col;
//数组维数
//元素个数
intmaxsum;
//最多的元素个数
Term*t;
//存储的数组
SparseMatrix.cpp
SparseMatrix.h"
SparseMatrix:
SparseMatrix(intr,intc)
row=r;
col=c;
sum=0;
maxsum=r*c;
t=newTerm[maxsum];
voidSparseMatrix:
transpose()
Term*cur=newTerm[maxsum];
int*ColSize=newint[col];
int*RowNext=newint[row];
col;
i++)ColSize[i]=0;
row;
i++)RowNext[i]=0;
i++)ColSize[t[i].col]++;
//表示每一列的非零元素个数
RowNext[0]=0;
for(inti=1;
i++)RowNext[i]=RowNext[i-1]+ColSize[i-1];
//表示新矩阵中每一行的矩阵的前面的矩阵的个数
//进入转置操作
intj=RowNext[t[i].col]++;
cur[j].value=t[i].value;
cur[j].col=t[i].row;
cur[j].row=t[i].col;
deletet;
t=cur;
t[sum].value=x;
t[sum].row=i;
t[sum].col=j;
sum++;
t[i].value<
Add(SparseMatrix&
b)//两个稀疏矩阵相加
if(col!
=b.col||row!
=b.row){
两个矩阵行列不同无法相加"
intsa=0;
intsb=0;
intk=0;
while(sa<
sum||sb<
b.sum)
if(t[sa].col==b.t[sb].col&
&
t[sa].row==b.t[sb].row)
cur[k].col=t[sa].col;
cur[k].row=t[sa].row;
cur[k].value=t[sa].value+b.t[sb].value;
k++;
sa++;
sb++;
elseif(t[sa].row<
b.t[sb].row)
cur[k].value=t[sa].value;
elseif(t[sa].row>
cur[k].value=b.t[sb].value;
cur[k].row=b.t[sb].row;
cur[k].col=b.t[sb].col;
elseif(t[sa].col<
t[sb].col)
sum=k;
Term.h
classTerm
friendclassSparseMatrix;
intcol,row;
Term.cpp
TridiagonalMatrix.h
classTridiagonalMatrix
TridiagonalMatrix(intsize);
//矩阵非0元素个数
TridiagonalMatrix.cpp
TridiagonalMatrix.h"
TridiagonalMatrix:
TridiagonalMatrix(intsize)
t=newint[3*n-2];
voidTridiagonalMatrix:
三对角矩阵所添加的元素必须非零"
elseif(abs(i-j)>
1)
三对角矩阵添加元素位置错误"
switch(i-j)
case-1:
t[3*j-1]=x;
break;
case0:
t[3*j]=x;
case1:
t[3*j+1]=x;
intTridiagonalMatrix:
elseif(abs(i-j)<
=1)
returnt[3*j+(i-j)];
3*n-2;
Test.cpp
cstring>
cstdlib>
intwei,num[100][100];
voidc()
wei;
for(intj=0;
j++)
cin>
>
num[i][j];
intmain()
intk=0,l=0;
/*三对角矩阵实验开始
测试数据4~10~3n-2
4
1200
3450
0789
0087
*/
请输入三对焦矩阵维数及容:
"
cin>
c();
TridiagonalMatrix*TM=newTridiagonalMatrix(wei);
if(num[j][i]!
=0)
TM->
Store(num[j][i],j,i);
TM->
print();
请输入要查询的元素的位置"
k>
l;
l=TM->
Retrieve(k,l);
查询结果:
l<
***********************************************"
/*下三角矩阵实验开始
测试数据4~10~n*(n+1)/2
1000
2300
4560