2023年山东大学数据结构实验报告四.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2023年山东大学数据结构实验报告四.docx》由会员分享,可在线阅读,更多相关《2023年山东大学数据结构实验报告四.docx(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、山东大学 软件工程 学院数据结构课程实验报告学号:姓名:班级:软件工程2023级2班实验题目:矩阵和散列表实验学时:实验日期:20 2 3. 1 1.11实验目的:掌握特殊矩阵和稀疏矩阵。掌握散列表及其应用。硬件环境:实验室软件环境:Vi st ual Studio 2023实验环节与内容:实验内容:1、创建三对角矩阵类,采用按列映射方式,提供store和retrie v e方法。2、创建下三角矩阵类,采用按列映射方式,提供sto r e和r e t rieve方法。3、创建稀疏矩阵类,采用行主顺序把稀疏矩阵映射到一维数组中,实现稀疏矩阵的转置和 两个稀疏矩阵的加法操作。4、使用散列表设计实现
2、一个字典,假设关键字为整数且D为961,在字典中插入随机产 生的500个不同的整数,实现字典的建立和搜索操作。分别使用线性开型寻址和链表散 列解决溢出。代码体:Cha inlla s hTableNode. h#p r agma oncevoid SparseMa t r i x: : print () 。f or (int i = 0; i sum; i+) 3。cout t Li, v alue ;6 。cou t e n d 1;ret urn;)void Spar seM a tri x : Ad d ( S pars e Ma t rix &b)/ / 两个稀疏矩阵相加 (if (c
3、o 1!= b. co 1 I row != b. row) cou t 两个矩阵行列不同无法相加 en d 1;。ret urn;)i n t sa = 0;int sb = 0;T e rm *cur = new Term maxsum;int k = 0 ;。whil e (sa sum | | sb b. s um) 。i f (t sa. c o 1 = b. t sb . col&t sa. r o w = b. t sb . row)O 0b 。 cur k. c ol = tsa. col;。 c u r k. row = ts a . row ;3 o c ur k. v a
4、 lu e = t sa. v alu e + b . t s b . value;b b k+;。s a +;3 s b +;)。e else if (t s a . r ow b. t s b. r o w) 。3 3 cu r k . v alue = b. t sb. valu e ;o cur k . row = b. t s b . row;e c u rk, c ol = b t sb, c ol;b b b k+ ;b 0 s b+;06)b 。 el s e if (t s a . col t s b . c o 1)so cur k. c ol = t sa . col;3
5、 cur k. r ow = t s a .row;。cu r k . value = t saL value;o k+;3 。 sa+;O 0)b 。 e Ise(3 o c ur k. valu e = b.t s b . v alue; cur k . row = b. t s b . r ow;。o cur kJ. col = b t sb. col;b0 k+;bb Sb+;)6 )s u m = k ;d e 1 e t e t ;t = c ur;。re t ur n ;)T e rm. h#p r a g ma on c ec la s s T e r mf r iend c
6、1 ass Spar s eMatr i x ;p rivate:3 i nt col, row;in t v a 1 ue;Term, c p p#in c lude T e rm. hTridiagonalMa t r i x . h#p r agma onceclass T r idiagonalMatr i x(p ub 1 i c:T r id i ag o n alMatrix (in t size);。void S t o r e( i nt x , int i, in t j ) ;/ 向矩阵里存储一个元素 int Retrieve(int i,int j) ; / /返II矩
7、阵中的一个元素void pr i nt ();pri v at e :。int n;矩阵非0元素个数。int *t; 用数组来存储矩阵;T r id i a go n alM a trix. cp p#in c lude Tridi a g on a IMatrix. hz,#i n elude usin g names p ace s t d ;Tr i diag o na 1 Ma t rix: :Tridiago n al Ma t rix (in t size) n = s i ze;。t = n e w i n t 3 * n 2;)v oid T ri d ia g o n alM
8、atrix: : Sto r e (in t x, int i , int j (oif ( i 0 I | j =n | j =n)。j endl;j endl;。cou t 三对角矩阵行列输入错误 i ret u rn;6 )。else if (x =0 )(。co u t 三对角矩阵所添加的元素必须非零 1)(。cout ”三对角矩阵添加元素位置错误 endl;。retu r n;)3 switch ( i - j )。c a se -1:。t3 * j - 1 = x;o b re a k;cas e 0 :t 3 * j = x;break;case 1:。t3 * j + 1 =
9、x;b re a k;return;)i n t Tri d i a gon a IMa t r ix: : R e t r ieve (int i, int j)(。i f ( i 0 | I j= (n - 1) | j = (n 1)。(b cout 三对角矩阵行列输入错误 endl;retu r n -1;。e 1 s e if ( a b s (i - j) = 1)3 b ret u rn t3*j+(i j);6 e 1 s e (re t u r n 0;void Tri d i a g onalMat r i x: :print ()for (int i = 0;i 3* n
10、 - 2 ; i+) cou t t i ;)。c o ut end 1 ; ret urn;)Te s t. cp p# in c 1 ude# i nclude#includettinclud e Tr i di ago n alM a tri x . h # in c lude Low e rT r iangul a rMatr i x. h n# i n c ludez,SparseMatrix. h# i n clu d e,zHas h Table, h #i n clud e Cha i nllashT a ble. husin g name spac e s td;i nt w
11、e i , n um100 1 00;v o i d c()(。for ( i nt i = 0 ; i wei; i+) fo r (i n t j = 0;j numi j;)int main ()int k0, 1。/*三对角矩阵实验开始测试数据4-103n-2。40 1 2 0 03 4 5 00 7 8 9o 0 0 8 7 * /。cout ”请输入三对焦矩阵维数及内容: endl;cin wei;。c();。Tridi a gona 1 Ma t ri x *TM = n e w Tridia gon alM a t r i x ( wei);for (int i = 0; i
12、wei; i+)。fo r (int j =0; j S tor e (num E j i, j , i );。TM pri n t ();b cout 请输入要查询的元素的位置 k 1;。1 = T M-R e trieve (k, 1);b cout ”查询结果: 1 endl;o co u t *” wei;。c ();。Lowe rTri a ngularM a trix *LTM = n e w LowerTri a ngularMatri x (w e i);f or (inti = 0; i wei; i + + )。for (int j = 0; j S t ore (num
13、j i, j, i);3 LTM-prin t ();cou t k 1;1 = LTM-Re t r i e v e( k , 1);。c o ut ”查询结果: 1 e n d 1; endl;co u t k 1 ;SparscMatrix *SM = new Spa rseMatri x (k,1);f or (in t i = 0; i k; i+)f or (i n t j = 0; j n umi j;。if (num i j)o o SM-Store(numi j , i, j);0 )cout ”稀疏矩阵为:;。SM-p r int ();。SM-tra n spose ()
14、;cout V转置后稀疏矩阵为:;。SM print ();SM- t ranspose();。cou t pri n t ();c o u t 矩阵相加开始,请输入要使用的矩阵维数及内容: end 1 ;o c i n k 1 ;。Spa rseM a t ri x *SM2 = n ew SparseMatrix (k,1 );fo r (in t i = 0; i k; i+ + ) for (int j = 0; j numi j;b i f (numi j)S M 2-Store(numi j, i, j);cout ”新矩阵为:;b SM 2 -print ();SM-Add (*
15、SM2);。cout pr i nt ();o cout * e ndl;。ci n . g e t ();sy s t e m (pause);。/*使用散列表设计实现一个字典,假设关键字为整数且D为9 61,在字典中插入随机产生的5 00个不同的整数,实 现字典的建立和搜索操作。分别使用线性开型寻址和链表散列解决溢出0*/k = 0 ; 1 = 0;cout 随即建立关键字为9 6 1,500个元素的散列表 endl;HashTab 1 e *BT = n e w Has h Table(961);。for (int i = 0; i In s e r t(j) i+;)3 BT-prin
16、t ();b c out vSearch (k);。cout 元素位置为: 1 e ndl;。cout 输入要插入的元素 k ;BT 1 n sert ( k );。B T pri n t ();。cout ”实现溢出解决,插入所插入元素*2的元素* endl;。B T Insert ( 2 * k);。BT-pri n t ();o cout * * 火 * * v e n dl ;s y s t e m( p au s e );/ *链表散列解决溢出0*/C out 链表散列解决溢出,关键字为5 0,元素个数1 0 0 end 1 ;Chai n Hash T a ble * HT = n
17、ew Cha i nH a s h Table (50);f o r (int i = 0; i I n s e r t (j)o i +;00)b HT- p r int ();。co u t 输入要插入的元素 V k;HT- I nser t (k);HT-pri n t ();b C o ut 实现溢出解决,插入所插入元素*2的元素In s e r t ( 2 * k);IIT pr int();o cout * 火 *火*火 am oa* aL L m am aaL vL L L * via L L 1 L * L * * 1 L aoa-丫- -j - -j - - - - - -
18、- 丫一 丫 j - I , 丫 j ,丫 丫 , J 丫 i J , J ,谙输入下三角矩阵维数及内容:41 24735869 -1卜青输入要查询的元素的位置声询结果:6-j - -j - -j - - y - -j - - - -j - - - - - - - - - - - - - - - J - - - - - - - - - - - - - - - - -请输入稀疏矩阵的维数及内容:4 51 0 0 0 20 3 0 0 04 0 0 5 0搜狗拼音输入法全:xeC:UsersqufubDocument5Visual Studio 2013Projectebue声询结果:6-L*-j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 山东大学 数据结构 实验 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内