数据结构压缩矩阵
数据结构实验五矩阵的压缩存储与运算学习资料

数据结构实验五矩阵的压缩存储与运算第五章矩阵的压缩存储与运算【实验目的】1. 熟练掌握稀疏矩阵的两种存储结构(三元组表和十字链表)的实现;2. 掌握稀疏矩阵的加法、转置、乘法等基本运算;3. 加深对线性表的顺序存储和链式结构的理解。
第一节知识准备矩阵是由两个关系(行关系和列关系)组成的二维数组,因此对每一个关系上都可以用线性表进行处理;考虑到两个关系的先后,在存储上就有按行优先和按列优先两种存储方式,所谓按行优先,是指将矩阵的每一行看成一个元素进行存储;所谓按列优先,是指将矩阵的每一列看成一个元素进行存储;这是矩阵在计算机中用一个连续存储区域存放的一般情形,对特殊矩阵还有特殊的存储方式。
一、特殊矩阵的压缩存储1. 对称矩阵和上、下三角阵若n阶矩阵A中的元素满足= (0≤i,j≤n-1 )则称为n阶对称矩阵。
对n阶对称矩阵,我们只需要存储下三角元素就可以了。
事实上对上三角矩阵(下三角部分为零)和下三角矩阵(上三角部分为零),都可以用一维数组ma[0.. ]来存储A的下三角元素(对上三角矩阵做转置存储),称ma为矩阵A的压缩存储结构,现在我们来分析以下,A和ma之间的元素对应放置关系。
问题已经转化为:已知二维矩阵A[i,j],如图5-1,我们将A用一个一维数组ma[k]来存储,它们之间存在着如图5-2所示的一一对应关系。
任意一组下标(i,j)都可在ma中的位置k中找到元素m[k]= ;这里:k=i(i+1)/2+j (i≥j)图5-1 下三角矩阵a00 a10 a11 a20 … an-1,0 … an-1,n-1k= 0 1 2 3 …n(n-1)/2 …n(n+1)/2-1图5-2下三角矩阵的压缩存储反之,对所有的k=0,1,2,…,n(n+1)/2-1,都能确定ma[k]中的元素在矩阵A中的位置(i,j)。
这里,i=d-1,(d是使sum= > k的最小整数),j= 。
2. 三对角矩阵在三对角矩阵中,所有的非零元素集中在以主对角线为中心的带内状区域中,除了主对角线上和直接在对角线上、下方对角线上的元素之外,所有其它的元素皆为零,见图5-3。
矩阵压缩存储

矩阵压缩存储矩阵是在计算机科学和数学中常见的数据结构,用于表示具有行和列的二维数据。
在很多应用中,矩阵的大小可能非常大,占用大量的存储空间。
为了节省存储空间并提高计算效率,在某些情况下可以使用矩阵压缩存储技术。
什么是矩阵压缩存储?矩阵压缩存储是一种将稀疏矩阵(其中大部分元素为零)以更紧凑形式表示的技术。
通过只存储非零元素及其位置,可以显著减少所需的存储空间。
稀疏矩阵稀疏矩阵是指其中大部分元素为零的矩阵。
在实际应用中,很多情况下只有少数元素非零,例如图像处理、网络分析、自然语言处理等领域。
对于这些稀疏矩阵,传统的二维数组表示方法会浪费大量的存储空间。
稀疏矩阵压缩存储方法COO格式COO(Coordinate)格式是最简单直观的稀疏矩阵压缩存储方法。
它使用三个数组分别存储非零元素的值、行索引和列索引。
例如,对于矩阵:1 0 00 2 03 0 4COO格式可以表示为:values = [1, 2, 3, 4]rows = [0, 1, 2, 2]cols = [0, 1, 0, 2]CSR格式CSR(Compressed Sparse Row)格式是一种常用的稀疏矩阵压缩存储方法。
它使用三个数组分别存储非零元素的值、每行第一个非零元素在值数组中的位置和列索引。
例如,对于矩阵:1 0 00 2 03 0 4CSR格式可以表示为:values = [1, 2, 3, 4]row_ptrs = [0, -1, -1, -1] # 第一个非零元素在values中的位置cols = [0, -1, -1, -1] # 列索引CSC格式CSC(Compressed Sparse Column)格式与CSR格式类似,只是将行和列交换。
它使用三个数组分别存储非零元素的值、每列第一个非零元素在值数组中的位置和行索引。
其他压缩存储方法除了COO、CSR和CSC格式,还有其他一些矩阵压缩存储方法,如LIL(List of Lists)格式、DOK(Dictionary of Keys)格式等。
《数据结构》填空作业题(答案)

《数据结构》填空作业题答案第 1 章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3.数据结构的形式定义为:数据结构是一个二元组:Data Structure =( D, S)。
4.数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5.数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6.在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7.在树形结构中,数据元素之间存在一对多的关系。
8.数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。
9.数据的逻辑结构包括线性结构、树形结构和图形结构 3 种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12.数据的存储结构可用 4 种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。
14.数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16.数据元素可由若干个数据项组成。
17.算法分析的两个主要方面是时间复杂度和空间复杂度。
18.一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19.算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。
矩阵压缩存储实验报告

一、实验目的1. 理解并掌握矩阵压缩存储的基本原理和方法。
2. 学习针对不同类型矩阵(对称矩阵、三角矩阵、稀疏矩阵)的压缩存储技术。
3. 通过编程实现矩阵压缩存储,并验证其正确性和效率。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 20194. 实验数据:随机生成的矩阵数据三、实验内容本次实验主要针对以下三种特殊矩阵的压缩存储进行实验:1. 对称矩阵2. 三角矩阵(上三角矩阵和下三角矩阵)3. 稀疏矩阵四、实验步骤1. 对称矩阵压缩存储- 设计一个对称矩阵的结构体,包含矩阵的行数、列数以及压缩后的数组。
- 实现一个函数,将输入的对称矩阵压缩存储到一维数组中。
- 实现一个函数,根据一维数组中的元素索引还原对称矩阵。
2. 三角矩阵压缩存储- 设计一个三角矩阵的结构体,包含矩阵的行数、列数以及压缩后的数组。
- 实现两个函数,分别用于将输入的上三角矩阵和下三角矩阵压缩存储到一维数组中。
- 实现两个函数,分别用于根据一维数组中的元素索引还原上三角矩阵和下三角矩阵。
3. 稀疏矩阵压缩存储- 设计一个稀疏矩阵的结构体,包含矩阵的行数、列数、非零元素个数以及压缩后的数组。
- 实现一个函数,将输入的稀疏矩阵压缩存储到一维数组中。
- 实现一个函数,根据一维数组中的元素索引还原稀疏矩阵。
五、实验结果与分析1. 对称矩阵压缩存储- 实验结果:成功将输入的对称矩阵压缩存储到一维数组中,并可以正确还原。
- 分析:对称矩阵压缩存储可以节省约50%的存储空间。
2. 三角矩阵压缩存储- 实验结果:成功将输入的上三角矩阵和下三角矩阵压缩存储到一维数组中,并可以正确还原。
- 分析:三角矩阵压缩存储可以节省约75%的存储空间。
3. 稀疏矩阵压缩存储- 实验结果:成功将输入的稀疏矩阵压缩存储到一维数组中,并可以正确还原。
- 分析:稀疏矩阵压缩存储可以大大节省存储空间,提高矩阵运算的效率。
数据结构课后习题及答案

填空题(10 *1’ = 10' )一、概念题2。
2.当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。
2。
3。
当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。
2。
6。
带头结点的单链表L中只有一个元素结点的条件是L—〉Next->Next==Null。
3。
6。
循环队列的引入,目的是为了克服假溢出.4。
2。
长度为0的字符串称为空串。
4。
5.组成串的数据元素只能是字符。
4。
8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。
7.2。
为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。
5.7。
广义表的深度是广义表中括号的重数7。
8.有向图G可拓扑排序的判别条件是有无回路。
7.9。
若要求一个稠密图的最小生成树,最好用Prim算法求解。
8。
8.直接定址法法构造的哈希函数肯定不会发生冲突。
9。
2。
排序算法所花费的时间,通常用在数据的比较和交换两大操作。
1。
1。
通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。
1。
2.对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。
1。
3。
存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。
1。
4。
抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。
1。
5.一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。
2.8.在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s—〉prior= p—〉prior; s-〉next= p; p-〉prior- next= s;p-〉prior= s;。
2.9。
在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一。
稀疏矩阵存储和操作稀疏矩阵的数据结构与算法

稀疏矩阵存储和操作稀疏矩阵的数据结构与算法稀疏矩阵是指具有大量零元素和少量非零元素的矩阵。
在实际场景中,由于矩阵中大部分元素为零,传统的矩阵存储方式会造成大量的存储空间的浪费以及数据操作的低效性。
因此,为了节省存储空间和提高数据操作的效率,稀疏矩阵的存储和操作需要借助于特定的数据结构和算法。
一、稀疏矩阵存储的数据结构1.1. 压缩存储方法压缩存储方法是一种常用的稀疏矩阵存储方法。
常见的压缩存储方法有三种:行压缩法(CSR)、列压缩法(CSC)和十字链表法。
1.1.1. 行压缩法(CSR)行压缩法是通过两个数组来存储稀疏矩阵的非零元素。
第一个数组存储非零元素的值,第二个数组存储非零元素在矩阵中的位置信息。
1.1.2. 列压缩法(CSC)列压缩法与行压缩法相似,只是存储方式不同。
列压缩法是通过两个数组来存储稀疏矩阵的非零元素。
第一个数组存储非零元素的值,第二个数组存储非零元素在矩阵中的位置信息。
1.1.3. 十字链表法十字链表法是一种更加灵活的稀疏矩阵存储方法。
通过使用链表的方式,将非零元素存储在链表中,并且每个非零元素还具有行和列的指针,方便进行数据操作。
1.2. 坐标存储法坐标存储法是一种简单直观的稀疏矩阵存储方法。
每个非零元素包括行列坐标和元素值,通过三元组的方式进行存储。
二、稀疏矩阵的操作算法2.1. 矩阵转置矩阵转置是指将原矩阵的行变为列,列变为行的操作。
对于稀疏矩阵,常用的转置算法为快速转置算法。
该算法通过统计每列非零元素的个数,并根据列的非零元素个数确定每个非零元素转置后的位置。
2.2. 矩阵相加矩阵相加是指将两个矩阵对应位置上的元素相加得到一个新的矩阵。
对于稀疏矩阵的相加,可以遍历两个矩阵的非零元素,对相同位置上的元素进行相加。
2.3. 矩阵相乘矩阵相乘是指将两个矩阵相乘得到一个新的矩阵。
对于稀疏矩阵的相乘,常用的算法为稀疏矩阵乘法算法。
该算法通过遍历两个矩阵的非零元素,按照矩阵乘法的规则计算得到新矩阵的非零元素。
数据结构第五章习题答案

1.二维数组A行下标i的范围从1到12,列下标j的范围从3到10,采用行序为主序存储,每个数据存储元素占用4个存储单元,该数组的首地址(既A[1][3]的地址)为1200,则A[6][5]的地址为(D)A.1400B.1404C.1372D.13682.有一个M*N的矩阵A,若采用行序为主序进行顺序存储,每个元素占用8个字节,则A ij (1≤i≤M,1≤i≤N)元素的相对字节地址(相对首元素地址而言)为(B)A.((i-1)*N+j)*8B.((i-1)*N+j-1)*8C.(i*N+j-1)*8D.((i-1)*N+j+1)*83.稀疏矩阵一般的压缩存储方法有两种,即(D)A.二维数组和三维数组B.三元组和散列C.散列和十字链表D.三元组和十字链表4.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点(B)A.正确B.错误5.广义表((a,b),c,d)的表头是(C),表尾是(D)。
A.aB.bC.(a,b)D.(c,d)6.一个广义表的表头总是广义表,这个断言是(B)A.正确B.错误7.二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元,并且A[0][0]的存储地址是200,则A[6][12]的地址是(326)8.有一个10阶对称矩阵A,采用压缩存储方式(以行序为主存储,且A[0][0]=1),则A[4][3]的地址是(14)9.一个广义表为(a,(a,b),d,e,((i,j),k)),则该广义表的长度为(5),深度为(3)10.广义表((a),((b),c),(((d))))的表头是((a)),表尾是((((b),c),(((d)))))11.已知广义表A=((a,b,c),(d,e,f)),则广义表运算head(tail(tail(A)))=(e)12.已知广义表GL=(a,(b,c,d),e),运用head和tail函数取出GL中的原子b的运算是(head(head(tail(GL))))13.特殊矩阵和压缩矩阵哪一种压缩存储后会失去随机存取的功能?为什么?答:稀疏矩阵在进行压缩存储后会失去随机存取的功能,因为非零元素的位置没有办法确定。
稀疏矩阵压缩的存储方法是

稀疏矩阵压缩的存储方法是稀疏矩阵压缩是一种数据结构,可以有效地占用存储空间,合理地存储稀疏矩阵。
通常来说,稀疏矩阵的元素大部分为0,只有少部分非零,所以采用压缩存储方法可以大大减少存储空间的使用。
稀疏矩阵的压缩存储方法有三种:顺序表压缩、链表压缩和十字链表压缩。
下面将对这三种方法进行详细介绍。
1.顺序表压缩方法:顺序表压缩方法是使用一个一维数组来存储稀疏矩阵。
数组的第一行存储矩阵的行数、列数、非零元素的个数。
数组的后续元素按行优先顺序存储矩阵的每一个非零元素。
例如,对于一个3*3的稀疏矩阵:1 0 00 0 23 0 0它的顺序表压缩形式为:3 3 2 第一行分别为行数、列数和非零元素个数1 1 1 第1个非零元素在第1行第1列,值为12 3 2 第2个非零元素在第2行第3列,值为23 1 3 第3个非零元素在第3行第1列,值为3在这个例子中,非零元素的个数为3,而原先需要占据9个空间的矩阵,现在只需要使用7个元素的数组就可以存储。
2.链表压缩方法:链表压缩方法首先将稀疏矩阵存储在单链表中。
单链表中的每一个节点包含4个数据域:行数,列数,元素值和指针域。
其中,指针域指向下一个非零元素节点。
例如,对于一个5*5的稀疏矩阵:0 0 0 0 03 0 0 0 00 0 1 0 00 0 0 2 00 0 0 0 0它的链表表示形式如下:(1,2,3)->(2,1,3)->(3,3,1)->(4,4,2)其中,每个元素依次表示行数、列数和元素值。
指针域则指向下一个非零元素。
相对于顺序表压缩,链表压缩更适用于稀疏矩阵比较大时,且存在大量的非零元素。
因为链表压缩能够动态分配存储空间,可以严格掌控存储空间的使用效率。
3.十字链表压缩方法:十字链表压缩是一种特殊的链表压缩方式,因为它在存储矩阵的同时,能够比较直观地表示矩阵的结构信息。
下面是一个矩阵以十字链表方式存储的示例:首先,将矩阵按行、列分别建立链表。
数据结构知识点总结归纳整理

第1章绪论1.1 数据结构的基本概念数据元是数据的基本单位,一个数据元素可由若干个数据项完成,数据项是构成数据元素的不可分割的最小单位。
例如,学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成。
数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
数据类型是一个值的集合和定义在此集合上一组操作的总称。
•原子类型:其值不可再分的数据类型•结构类型:其值可以再分解为若干成分(分量)的数据类型•抽象数据类型:抽象数据组织和与之相关的操作抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作。
抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。
通常用(数据对象、数据关系、基本操作集)这样的三元组来表示。
#关键词:数据,数据元素,数据对象,数据类型,数据结构数据结构的三要素:1.逻辑结构是指数据元素之间的逻辑关系,即从逻辑关系上描述数据,独立于计算机。
分为线性结构和非线性结构,线性表、栈、队列属于线性结构,树、图、集合属于非线性结构。
2.存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构,包括数据元素的表示和关系的表示,依赖于计算机语言,分为顺序存储(随机存取)、链式存储(无碎片)、索引存储(检索速度快)、散列存储(检索、增加、删除快)。
3.数据的运算:包括运算的定义和实现。
运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。
1.2 算法和算法评价算法是对特定问题求解步骤的一种描述,有五个特性:有穷性、确定性、可行性、输入、输出。
一个算法有零个或多个的输入,有一个或多个的输出。
时间复杂度是指该语句在算法中被重复执行的次数,不仅依赖于问题的规模n,也取决于待输入数据的性质。
一般指最坏情况下的时间复杂度。
空间复杂度定义为该算法所耗费的存储空间。
算法原地工作是指算法所需辅助空间是常量,即O(1)。
第2章线性表2.1 线性表的定义和基本操作线性表是具有相同数据类型的n个数据元素的有限序列。
稀疏矩阵的压缩存储节省存储空间的数据结构

稀疏矩阵的压缩存储节省存储空间的数据结构在计算机科学和数据处理领域,稀疏矩阵是指大部分元素都是零的矩阵。
由于稀疏矩阵中存在大量的零元素,传统的二维数组表示方法会浪费大量的存储空间。
为了解决这个问题,人们引入了稀疏矩阵的压缩存储技术,旨在减少存储空间的占用,并提高数据的访问效率。
稀疏矩阵的压缩存储是通过对非零元素的位置和数值进行编码,并以一种更简洁的数据结构存储。
常见的稀疏矩阵压缩存储方式有三种:行压缩存储(CSR)、列压缩存储(CSC)和对角线存储(DIA)。
一、行压缩存储(CSR)行压缩存储使用三个一维数组来表示稀疏矩阵。
第一个数组存储非零元素的值,第二个数组存储非零元素所在的列号,第三个数组存储每行的起始位置。
这种存储方式适用于按行顺序遍历矩阵的场景,可以有效地减少存储空间的使用。
二、列压缩存储(CSC)列压缩存储与行压缩存储相似,只是将行和列的角色互换。
通过使用三个一维数组,分别存储非零元素的值、非零元素所在的行号和每列的起始位置,可以提高按列访问矩阵元素的效率。
三、对角线存储(DIA)对角线存储是一种针对特殊类型稀疏矩阵的压缩存储方法。
对于具有规律性的稀疏矩阵,可以只存储其中的有效元素和其对应的位置。
一般来说,对角线存储适用于具有较多对角线元素的稀疏矩阵。
稀疏矩阵的压缩存储方法可以大大减少存储空间的使用,从而提高数据处理的效率和性能。
这对于那些需要处理大规模稀疏矩阵的应用非常重要。
例如,在图形处理、线性代数计算和网络分析等领域,稀疏矩阵经常出现,并且占据了大量的存储和计算资源。
需要注意的是,稀疏矩阵的压缩存储方式虽然减少了存储空间的占用,但在访问非零元素时需要进行一定的计算和索引操作,可能会影响一些对数据访问速度要求较高的应用。
因此,在选择和使用压缩存储结构时,需要综合考虑存储空间和计算效率之间的平衡。
总结而言,稀疏矩阵的压缩存储技术为处理稀疏矩阵提供了一种高效的方式。
通过选择适当的存储结构,可以显著降低存储空间的占用,并提高数据的访问效率。
线性代数与数据结构的结合

线性代数与数据结构的结合线性代数和数据结构是计算机科学中两个重要的学科领域,它们在不同的层面上对计算机科学和工程领域都有着重要的影响。
线性代数主要研究向量空间和线性变换等概念,而数据结构则关注数据的组织、存储和管理方式。
将线性代数与数据结构结合起来,可以为计算机科学领域带来更多的可能性和应用场景。
本文将探讨线性代数与数据结构的结合,以及这种结合对计算机科学领域的意义和影响。
一、线性代数在数据结构中的应用1. 向量和矩阵在数据结构中的表示在数据结构中,向量和矩阵是常见的数据类型。
线性代数中的向量和矩阵概念可以被应用于数据结构中,用来表示和处理各种数据。
例如,在图像处理中,可以使用矩阵来表示图像数据,通过线性代数中的运算来实现图像的变换和处理。
向量和矩阵的运算规则也可以被应用于数据结构中的算法设计和优化中。
2. 线性方程组在数据处理中的应用线性代数中的线性方程组是一种常见的数学工具,可以用来描述多个变量之间的线性关系。
在数据处理和分析中,线性方程组经常被用来建立模型和解决实际问题。
通过线性代数中的矩阵运算和求解方法,可以高效地处理大规模的数据集,实现数据的分析和挖掘。
3. 特征值和特征向量在数据分析中的应用特征值和特征向量是线性代数中重要的概念,它们在数据分析和机器学习中有着广泛的应用。
通过计算数据集的特征值和特征向量,可以实现数据的降维和特征提取,从而更好地理解和利用数据。
在数据结构中,特征值和特征向量的计算方法也可以被应用于图像处理、信号处理等领域。
二、数据结构在线性代数中的应用1. 稀疏矩阵的存储和压缩在线性代数中,稀疏矩阵是指大部分元素为零的矩阵。
在实际应用中,很多矩阵都是稀疏的,因此如何高效地存储和处理稀疏矩阵成为一个重要问题。
数据结构中的稀疏矩阵存储和压缩技术可以被应用于线性代数中,提高矩阵运算的效率和性能。
2. 图结构在线性代数中的应用图结构是数据结构中常见的一种数据类型,用来描述节点之间的关系。
数据结构(C语言版)选择`填空题

数据结构(C语言版)选择、填空题一概论选择1、( )是数据的基本单位。
?A、数据结构?B、数据元素?C、数据项?D、数据类型2、以下说法不正确的是( )。
?A、数据结构就是数据之间的逻辑结构。
?B、数据类型可看成是程序设计语言中已实现的数据结构。
?C、数据项是组成数据元素的最小标识单位。
?D、数据的抽象运算不依赖具体的存储结构。
3、学习数据结构主要目的是( )。
?A、处理数值计算问题?B、研究程序设计技巧?C、选取合适数据结构,写出更有效的算法。
?D、是计算机硬件课程的基础。
4、一般而言,最适合描述算法的语言是( )。
?A、自然语言?B、计算机程序语言?C、介于自然语言和程序设计语言之间的伪语言?D、数学公式5、通常所说的时间复杂度指( )。
?A、语句的频度和?B、算法的时间消耗?C、渐近时间复杂度?D、最坏时间复杂度6、A算法的时间复杂度为O(n^3),B算法的时间复杂度为O(2^n),则说明( )。
?A、对于任何数据量,A算法的时间开销都比B算法小?B、随着问题规模n的增大,A算法比B算法有效?C、随着问题规模n的增大,B算法比A算法有效?D、对于任何数据量,B算法的时间开销都比A算法小填空1、数据的( )结构依赖于计算机语言.2、数据的逻辑结构可分为线性结构和( )结构。
3、算法的时间复杂度与问题的规模有关外,还与输入实例的( )有关。
4、常用的四种存储方法是什么?5、常见的数据的逻辑结构有哪两种?6、一般,将算法求解问题的输入量称为( )。
二线性表选择题1、以下关于线性表的说法不正确的是( )。
?A、线性表中的数据元素可以是数字、字符、记录等不同类型。
?B、线性表中包含的数据元素个数不是任意的。
?C、线性表中的每个结点都有且只有一个直接前趋和直接后继。
?D、存在这样的线性表:表中各结点都没有直接前趋和直接后继。
2、线性表的顺序存储结构是一种( )的存储结构。
?A、随机存取?B、顺序存取?C、索引存取?D、散列存取3、在顺序表中,只要知道( ),就可在相同时间内求出任一结点的存储地址。
数据结构-矩阵的压缩存储程序【范本模板】

实验报告课程名:数据结构(C语言版)实验名:矩阵的压缩存储姓名:班级:学号:时间:2014.11.23一实验目的与要求1.掌握并实现稀疏矩阵的压缩存储的方法2.在该存储方法上实现矩阵的操作二实验内容•判断一个用二维数组存储的矩阵是不是稀疏矩阵•将其转化为压缩存储的形式•在压缩存储上实现矩阵的乘法和转置操作三实验结果与分析压缩转置程序:#include〈stdio。
h〉//判断该矩阵是否为稀疏矩阵#define m 10#define n 10int a[m][n]={{1,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{1,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,7,0},{0,0,0,0,0,0,8,0,0,0},{0,0,0,0,0,0,0,0,0,0},};struct three{int i,j;int value;};struct three stu[100];struct three1{int i,j;int value;};struct three1 stu1[100];int jiance(){int x=0;//赋初值为0for(x=0;x<=99;x++){stu[x].value=0;}float t=0;float v;for(int i=0;i〈m;i++){for(int j=0;j〈n;j++){if(a[i][j]!=0)t++;}}if((v=t/(m*n))〈=0.05){printf(”该矩阵为稀疏矩阵%f\n",v);return 1;}else{printf(”该矩阵不是稀疏矩阵\n”);return 0;}}void yasuo(){int t=0;for(int r=0;r<m;r++){for(int c=0;c<n;c++){if(a[r][c]!=0){stu[t].i=r;stu[t].j=c;stu[t]。
数据结构-第四章 矩阵的压缩存储.

3
二维数组同样满足数组的定义。一个二维 数组可以被看成是特殊的一维数组,其中, 每个元素又是一个一维数组。多维数组可以 按同样的方法类推。
) )
Amn
( a11 a12 (a 21 a 22 ... ( ... (a m1 a m 2
( ) (
... ... a1n ) ... ... a 2 n ) ... ... ... ) ... ... a mn )
特殊矩阵:值相同的元素或零元素在矩阵中
分布有一定规律。 稀疏矩阵:零元素较多,分布无规律。
11
4.2.1
对称矩阵
Aij Aji
在一个n阶方阵A中,若元素满足下述性质:
则称A为对称矩阵。对称矩阵中的元素关于主 对角线对称,故只需要存储矩阵的上三角或下 三角矩阵,这样可以节约大约一半的空间。
0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 67 0 0
col
1 2 1
2 2
3
4 1
5 0
6 1 8
7 0 9
num[col]
cpot[col]
2
5
3
7
8
扫描矩阵三元组表,根据某项的列号,确定它转置 后的行号,查 cpot表,按查到的位置直接将该项存入 转置三元组表中。
7
二维数组与高维数组
1)存储方式
计算机的存储结构是一维的,因而多维数组必须 按某种次序排成一个线性序列加以存储。
a[1][1] a[2][1] A a[3][1] a[m][1]
a[1][2] a[2][2] a[3][2]
a[1][3] a[2][3] a[3][3]
矩阵分解与数据压缩

随着计算能力的提升和数据规模的增大,数据处理已成为现代科学和工程中一个重要的任务。
然而,处理大规模数据往往需要大量的计算资源和存储空间,这给数据的传输和存储带来了巨大的挑战。
为了解决这个问题,矩阵分解和数据压缩成为了一个重要的研究方向,它能够将原有的数据表示为更加紧凑和有效的形式。
在数据分析和机器学习领域,矩阵分解是一种常用的技术。
它通过将一个大型矩阵分解为若干个较小的矩阵的乘积,从而减少了计算和存储的需求。
最经典的矩阵分解算法之一是奇异值分解(Singular Value Decomposition,SVD)。
SVD将一个矩阵分解为三个矩阵的乘积,其中一个矩阵是对角矩阵,其对角线元素称为奇异值。
通过选择较小的奇异值,并将其与原始矩阵的相关列或行相乘,可以使用更小的矩阵来近似表示原始数据。
数据压缩是指通过某种编码和解码技术,将原始数据表示为更紧凑的形式,以减少存储和传输的开销。
矩阵分解可以被看作是一种数据压缩技术,它能够将原始数据表示为较小的矩阵。
另一种常见的数据压缩方法是基于数学模型的压缩。
这种方法利用数据的特性和统计规律,通过选择合适的数学模型来表示数据,从而实现数据的压缩。
矩阵分解和数据压缩在很多领域都有广泛的应用。
在图像和音频处理中,矩阵分解和数据压缩可以将高维的图像和音频数据表示为较低维的傅里叶变换或小波变换系数,从而实现数据的压缩和去噪。
在推荐系统中,矩阵分解可以将用户和物品表示为较小的特征向量,从而实现对用户兴趣和物品特点的建模,提高推荐的准确性和效率。
在数据传输和存储中,矩阵分解和数据压缩可以减少数据传输的带宽和存储的空间需求,从而实现高效的数据传输和存储。
然而,矩阵分解和数据压缩也存在一些问题和挑战。
首先,矩阵分解和数据压缩往往需要牺牲一定的数据准确性来换取较高的计算和存储效率。
其次,矩阵分解和数据压缩算法的选择和参数设置对于压缩效果和计算效率有着重要的影响。
不同的数据类型和应用场景需要选择合适的矩阵分解和数据压缩算法。
矩阵压缩实验报告

一、实验目的1. 了解矩阵压缩存储的基本原理和方法。
2. 掌握稀疏矩阵的压缩存储方法,包括三元组顺序表存储和压缩存储下三角矩阵。
3. 熟悉矩阵压缩存储在数据结构中的应用,提高数据存储效率。
4. 通过实验验证矩阵压缩存储方法的有效性和优越性。
二、实验原理矩阵压缩存储是一种针对稀疏矩阵的存储方法,通过压缩存储非零元素,减少存储空间,提高数据存储效率。
稀疏矩阵是指矩阵中大部分元素为0的矩阵,其特点是存储空间利用率低,计算效率低。
矩阵压缩存储主要有以下几种方法:1. 三元组顺序表存储:将稀疏矩阵中的非零元素及其对应的行、列索引存储在一个三元组中,形成顺序表。
2. 压缩存储下三角矩阵:对于下三角矩阵,只存储主对角线以下的非零元素及其对应的行、列索引。
3. 压缩存储上三角矩阵:对于上三角矩阵,只存储主对角线以上的非零元素及其对应的行、列索引。
三、实验内容1. 实现稀疏矩阵的三元组顺序表存储。
2. 实现压缩存储下三角矩阵和上三角矩阵。
3. 实现矩阵转置算法,包括压缩存储下三角矩阵的转置和压缩存储上三角矩阵的转置。
4. 比较不同存储方法的存储空间和计算效率。
四、实验步骤1. 创建一个稀疏矩阵,随机生成非零元素及其对应的行、列索引。
2. 实现稀疏矩阵的三元组顺序表存储,将非零元素及其对应的行、列索引存储在一个顺序表中。
3. 实现压缩存储下三角矩阵,只存储主对角线以下的非零元素及其对应的行、列索引。
4. 实现压缩存储上三角矩阵,只存储主对角线以上的非零元素及其对应的行、列索引。
5. 实现矩阵转置算法,包括压缩存储下三角矩阵的转置和压缩存储上三角矩阵的转置。
6. 比较不同存储方法的存储空间和计算效率。
五、实验结果与分析1. 三元组顺序表存储存储空间:n(非零元素个数) 3计算效率:O(n)2. 压缩存储下三角矩阵存储空间:n(非零元素个数) 3计算效率:O(n)3. 压缩存储上三角矩阵存储空间:n(非零元素个数) 3计算效率:O(n)4. 矩阵转置算法计算效率:O(n)通过实验结果可以看出,压缩存储下三角矩阵和上三角矩阵的存储空间和计算效率与三元组顺序表存储相当,且对于稀疏矩阵,压缩存储方法可以显著减少存储空间,提高数据存储效率。
《数据结构》填空作业题(答案)

《数据结构》填空作业题答案第1章绪论(已校对无误)1.数据结构包括数据的逻辑结构、数据的存储结构和数据的运算三方面的内容。
2.程序包括两个内容:数据结构和算法。
3. 数据结构的形式定义为:数据结构是一个二元组: Data Structure =(D,S)。
4. 数据的逻辑结构在计算机存储器内的表示,称为数据的存储结构。
5. 数据的逻辑结构可以分类为线性结构和非线性结构两大类。
6. 在图状结构中,每个结点的前驱结点数和后继结点数可以有多个。
7. 在树形结构中,数据元素之间存在一对多的关系。
8. 数据的物理结构,指数据元素在计算机中的标识(映象),也即存储结构。
9. 数据的逻辑结构包括线性结构、树形结构和图形结构 3种类型,树型结构和有向图结构合称为非线性结构。
10. 顺序存储结构是把逻辑上相邻的结点存储在物理上连续的存储单元里,结点之间的逻辑关系由存储单元位置的邻接关系来体现。
11. 链式存储结构是把逻辑上相邻的结点存储在物理上任意的存储单元里,节点之间的逻辑关系由附加的指针域来体现。
12. 数据的存储结构可用4种基本的存储方法表示,它们分别是顺序存储、链式存储、索引存储和散列存储。
13. 线性结构反映结点间的逻辑关系是一对一的,非线性结构反映结点间的逻辑关系是一对多或多对多。
14. 数据结构在物理上可分为顺序存储结构和链式存储结构。
15. 我们把每种数据结构均视为抽象类型,它不但定义了数据的表示方式,还给出了处理数据的实现方法。
16. 数据元素可由若干个数据项组成。
17. 算法分析的两个主要方面是时间复杂度和空间复杂度。
18. 一个算法的时间复杂度是用该算法所消耗的时间的多少来度量的,一个算法的空间复杂度是用该算法在运行过程中所占用的存储空间的大小来度量的。
19. 算法具有如下特点:有穷性、确定性、可行性、输入、输出。
20. 对于某一类特定的问题,算法给出了解决问题的一系列操作,每一操作都有它的确切的定义,并在有穷时间内计算出结果。
数据结构基本概念归纳汇总

0 j=1 next[j]= max {k | 1≤k<j 且"t1t2 … tk -1 " ="tj-k+1tj-k+2 … tj-1"}
1 其它情况 数组的基本操作
数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。因此,在 数组中通常只有两种操作:
ElemType data[MaxSize]; int length; } SeqList;
// ElemType 表示不确定的数据类型 //length 表示线性表的长度
顺序表是随机存取结构
设顺序表的每个元素占用 c 个存储单元,则第 i 个元素的存储地址为: LOC(ai)= LOC(a1)+(i-1)×c
三角矩阵的压缩存储中:下三角矩阵中任一元素 aij 在一个数组 SA 中的下标 k 与 i、j 的对应关系为:
i×(i-1)/2 + j-1 k= n×(n+1)/2
当 i≥j 当 i<j
上三角矩阵元素 aij 在 SA 中的下标为:k =(i-1)×(2n-i+2)/2+(j-i)。 稀疏矩阵的压缩存储方式
抽象数据类型 抽象数据类型是一个数据结构以及定义在该结构上的一组操作的总称。抽象数据类型提供了使用和实
现两个不同的视图,实现了封装和信息隐藏。
算法的定义 通俗地讲,算法是解决问题的方法,严格地说,算法是对特定问题求解步骤的一种描述,是指令的有
限序列。
算法的特性 ⑴ 输入:一个算法有零个或多个输入(即算法可以没有输入),这些输入通常取自于某个特定的对象
数据结构 数据结构是指相互之间存在一定关系的数据元素的集合,即数据结构是一个二元组 DataStructure = (D,
数据结构判断题

数据结构判断题三.判断题。
1. 数据元素是数据的最小单位。
(错误)2. 数据的逻辑结构是指数据的各数据项之间的逻辑关系。
(错误)3. 算法的优劣与算法描述语言无关,但与所用计算机有关。
(错误)4. 程序一定是算法。
(错误)5. 数据的物理结构是指数据在计算机内的实际存储形式。
(正确)6. 数据的抽象操作的定义与具体实现有关。
(错误)7. 数据的逻辑结构表达了数据元素之间的关系,它依赖于计算机的存储结构。
(正确)习题二三.判断题。
1. 链表中的头结点仅起到标识作用。
(错误)2. 顺序存储的线性表可以按序号随机存取。
(正确)3. 线性表采用链表存储时,存储空间可以是不连续的。
(正确)4. 静态链表中地址相邻的元素具有前驱后继的关系。
(错误)5. 对任何数据结构,链式存储结构一定优于顺序存储结构。
(错误)6. 在线性表的顺序存储结构中,逻辑上相邻的两个元素在无力位置上不一定紧邻。
(错误)7. 循环链表可以在尾部设置头指针。
(正确)8. 为了方便插入和删除,可以使用双向链表存放数据。
(正确)9. 在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
(错误)10. 取顺序表的第i个元素的时间与i的大小有关。
(错误)习题三1. 消除递归一定要使用C。
(错误)2. C是实现过程和函数调用所必须的结构。
(正确)3. 两个C共享一片连续内存空间时,为提高内存利用率、减少溢出机会,应把两个C的栈底分别设在这片内存空间的两端。
(正确)4. 用递归方法设计的算法效率高。
(错误)5. 栈与队列是一种特殊的线性表。
(正确)6. 队列逻辑上是一端既能增加又能减少的线性表。
(错误)7. 循环队列通常浪费一个存储空间。
(正确)8. 循环队列也存在空间溢出问题。
(正确)9. 栈和队列的存储方式,既可以是顺序方式,又可以是链式方式。
(正确)10. 任何一个递归过程都可以转换成非递归过程。
(正确)习题四1. KMP算法的特点是在模式匹配时指示主串的指针不会变小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.课程设计的目的(1) 熟练使用 C ++语言编写程序,解决实际问题;(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;2.需求分析问题描述:对于特殊矩阵可以通过压缩存储减少存储空间。
基本要求:1.针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值。
2.输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值。
特殊矩阵:具有许多相同矩阵元素或零元素,并且这些相同矩阵元素或零元素的分布有一定规律性的矩阵。
最常见的特殊矩阵有对称矩阵、上(下)三角矩阵、对角矩阵等。
特殊矩阵的压缩存储方法:找出特殊矩阵中值相同的矩阵元素的分布规律,把那些呈现规律性分布的值相同的多个矩阵元素压缩存储到一个存储空间中。
3.矩阵的压缩与解压缩问题的设计图1-14.调试分析图1-2程序运行界面图1-3 程序运行界面图1-4 文件的输入5.小结经过矩阵的压缩与解压缩的实验,让我了解到计算机是怎么为了减少承储空间的,存储矩阵的。
以及特殊矩阵式在计算机中存储,以及把这些矩阵的压缩后怎么解压出来,恢复原来的样子!我觉得像这样的课程设计,一定要先想好有哪些板块,以及那些板块之间的关系这么样!谁调谁!6、参考文献[1] 严蔚敏,吴伟民编著. 数据结构(C 语言版)--北京: 清华大学出版社,2007.2[2]严蔚敏,吴伟民米宁编著. 数据结构题集(C 语言版)--北京: 清华大学出版社,2007.3[3]网上搜索相关程序作为参考附录:#include <iostream>#include<fstream>using namespace std;int SymmetricMatrix(){int colm;//行int row;//列fstream file("SymmetricMatrix.txt");ofstream fout("SymmetricMatrix1.txt");file>>colm>>row;int **matrix;//bool flag=true;matrix=new int *[colm];for(int i=0;i<colm;i++){matrix[i]=new int[row];}for (int i=0;i<colm;i++){for(int j=0;j<row;j++){file>>matrix[i][j];//cout<<matrix[i][j];}}for (int i=0;i<colm;i++){for(int j=i;j<row;j++){if(!(matrix[i][j]==matrix[j][i])){cout<<"输入的不是对称矩阵"<<endl;return 0;}}}cout<<"对称矩阵如下"<<endl;for (int i=0;i<colm;i++){for(int j=0;j<row;j++){//fin>>matrix[i][j];cout<<matrix[i][j]<<"\t";}cout<<endl;}int *array=new int[colm*(colm+1)/2];int k=0;for (int i=0;i<colm;i++){for(int j=i;j<row;j++){array[k]=matrix[i][j];file<<3433;//file<<array[k];//???????????????cout<<array[k]<<"\t";++k;}}cout<<endl;return 0;}int UpperTriangularMatrix(){int colm;//行int row;//列fstream file("UpperTriangularMatrix.txt");//ofstream fout("UpperTriangularMatrix.txt");file>>colm>>row;int **matrix;//bool flag=true;matrix=new int *[colm];for(int i=0;i<colm;i++){matrix[i]=new int[row];}for (int i=0;i<colm;i++){for(int j=0;j<row;j++){file>>matrix[i][j];//cout<<matrix[i][j];}}for (int i=0;i<colm;i++){for(int j=0;j<i;j++){if(!(matrix[i][j]==0)){cout<<"输入的不是上三角矩阵"<<endl;return 0;}}}cout<<"上三角矩阵如下"<<endl;for (int i=0;i<colm;i++){for(int j=0;j<row;j++){//fin>>matrix[i][j];cout<<matrix[i][j]<<"\t";}cout<<endl;}int *array=new int[colm*(colm+1)/2];int k=0;for (int i=0;i<colm;i++){for(int j=i;j<row;j++){array[k]=matrix[i][j];file<<3433;//file<<array[k];//???????????????cout<<array[k]<<"\t";++k;}}cout<<endl;return 0;}int LowerTriangularMatrix(){int colm;//行int row;//列fstream file("LowerTriangularMatrix.txt");//ofstream fout("UpperTriangularMatrix.txt");file>>colm>>row;int **matrix;//bool flag=true;matrix=new int *[colm];for(int i=0;i<colm;i++){matrix[i]=new int[row];}for (int i=0;i<colm;i++){for(int j=0;j<row;j++){file>>matrix[i][j];//cout<<matrix[i][j];}}for (int i=0;i<colm;i++){for(int j=i+1;j<row;j++){if(!(matrix[i][j]==0)){cout<<"输入的不是下三角矩阵"<<endl;return 0;}}}cout<<"下三角矩阵如下"<<endl;for (int i=0;i<colm;i++){for(int j=0;j<row;j++){//fin>>matrix[i][j];cout<<matrix[i][j]<<"\t";}cout<<endl;}int *array=new int[colm*(colm+1)/2];int k=0;for (int i=0;i<colm;i++){for(int j=0;j<=i;j++){array[k]=matrix[i][j];//file<<3433;//file<<array[k];//???????????????cout<<array[k]<<"\t";++k;}}cout<<endl;return 0;}int SymmetricMatrixuncompress(){int colm;//行int row;//列fstream file("SymmetricMatrixuncompress.txt");//ofstream fout("UpperTriangularMatrix.txt");file>>colm>>row;int **matrix;//bool flag=true;matrix=new int *[colm];for(int i=0;i<colm;i++){matrix[i]=new int[row];}int *array=new int[colm*(colm+1)/2];int k=0;for (int i=0;i<colm;i++){for(int j=0;j<=i;j++){file>>matrix[i][j];}}for (int i=0;i<colm;i++){for(int j=0;j<=i;j++){matrix[j][i]=matrix[i][j];}}cout<<"解压缩对称矩阵"<<endl;for (int i=0;i<colm;i++){for(int j=0;j<row;j++){cout<<matrix[i][j];}cout<<endl;}return 0;}int UpperTriangularMatrixuncompress(){int colm;//行int row;//列fstream file("UpperTriangularMatrixuncompress.txt");//ofstream fout("UpperTriangularMatrix.txt");file>>colm>>row;int **matrix;//bool flag=true;matrix=new int *[colm];for(int i=0;i<colm;i++){matrix[i]=new int[row];}int *array=new int[colm*(colm+1)/2];int k=0;for (int i=0;i<colm;i++){for(int j=i;j<row;j++){file>>matrix[i][j];}}for (int i=0;i<colm;i++){for(int j=0;j<=i;j++){matrix[i][j]=0;}}cout<<"解压缩上三角矩阵"<<endl;for (int i=0;i<colm;i++){for(int j=0;j<row;j++){cout<<matrix[i][j];}cout<<endl;}return 0;}int LowerTriangularMatrixuncompress(){int colm;//行int row;//列fstream file("LowerTriangularMatrixuncompress.txt");//ofstream fout("UpperTriangularMatrix.txt");file>>colm>>row;int **matrix;//bool flag=true;matrix=new int *[colm];for(int i=0;i<colm;i++){matrix[i]=new int[row];}int *array=new int[colm*(colm+1)/2];int k=0;for (int i=0;i<colm;i++){for(int j=0;j<=i;j++){file>>matrix[i][j];}}for (int i=0;i<colm;i++){for(int j=i+1;j<row;j++){matrix[i][j]=0;}}cout<<"解压缩上三角矩阵"<<endl;for (int i=0;i<colm;i++){for(int j=0;j<row;j++){cout<<matrix[i][j];}cout<<endl;}return 0;}int main(){char c;do{printf("\t 1.对称矩阵的压缩\n");printf("\t 2.上三角矩阵的压缩\n");printf("\t 3.下三角矩阵的压缩\n");printf("\t 4.对称矩阵的解压缩\n");printf("\t 5.上三角矩阵的解压缩\n");printf("\t 6.下三角矩阵的解压缩\n");printf("\t 7.!\n");printf("Please Input choose (1-7):");scanf("%s",&c);switch(c){case '1': printf("\t 1.\n"); SymmetricMatrix(); break;case '2': printf("\t 2.");UpperTriangularMatrix(); break;case '3': printf("\t 3."); LowerTriangularMatrix(); break;case '4': printf("\t 4."); SymmetricMatrixuncompress(); break;case '5': printf("\t 5."); UpperTriangularMatrixuncompress(); break;case '6': printf("\t 6."); LowerTriangularMatrixuncompress(); break;case '7': exit(0);default : break;}}while(c!='4');cin.get();return 0;}。