山东大学数据结构实验报告四Word格式文档下载.docx

上传人:b****6 文档编号:21194470 上传时间:2023-01-28 格式:DOCX 页数:26 大小:22.27KB
下载 相关 举报
山东大学数据结构实验报告四Word格式文档下载.docx_第1页
第1页 / 共26页
山东大学数据结构实验报告四Word格式文档下载.docx_第2页
第2页 / 共26页
山东大学数据结构实验报告四Word格式文档下载.docx_第3页
第3页 / 共26页
山东大学数据结构实验报告四Word格式文档下载.docx_第4页
第4页 / 共26页
山东大学数据结构实验报告四Word格式文档下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

山东大学数据结构实验报告四Word格式文档下载.docx

《山东大学数据结构实验报告四Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《山东大学数据结构实验报告四Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。

山东大学数据结构实验报告四Word格式文档下载.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1