用三元组表存储表示,求稀疏矩阵M转置函数T

合集下载

数据结构答案(清华大学出版)

数据结构答案(清华大学出版)
10
若是N维数组,其中任一元素的地址该如何计算? 若是 维数组,其中任一元素的地址该如何计算? 维数组 低维优先的地址计算公式,该式称为n维数组的映像函数: 低维优先的地址计算公式,该式称为n维数组的映像函数: 优先的地址计算公式
n
0)+ Loc(j1,j2,…jn)=LOC(0,0, 0)+i =1 j )=LOC(0,0,…0)
a11 a12 … a1n ^
… …
am1 am2 … amn ^
^ 注:数组的运算参见下一节实例(稀疏矩阵的转置) 数组的运算参见下一节实例(稀疏矩阵的转置)
13
5.3 矩阵的压缩存储
讨论: 讨论: 1. 什么是压缩存储? 什么是压缩存储? 若多个数据元素的值都相同 则只分配一个元素值的存储空间, 值都相同, 若多个数据元素的值都相同,则只分配一个元素值的存储空间, 且零元素不占存储空间。 且零元素不占存储空间。 2. 所有二维数组(矩阵)都能压缩吗? 所有二维数组(矩阵)都能压缩吗? 未必,要看矩阵是否具备以上压缩条件。 未必,要看矩阵是否具备以上压缩条件。 3. 什么样的矩阵具备以上压缩条件? 什么样的矩阵具备以上压缩条件? 一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩 一些特殊矩阵, 对称矩阵,对角矩阵,三角矩阵, 阵等。 阵等。 4. 什么叫稀疏矩阵? 什么叫稀疏矩阵 稀疏矩阵? 矩阵中非零元素的个数较少(一般小于5% 5%) 矩阵中非零元素的个数较少(一般小于5%) 重点介绍稀疏矩阵的压缩和相应的操作。 重点介绍稀疏矩阵的压缩和相应的操作。
8
无论规定行优先或列优先, 无论规定行优先或列优先,只要知道以下三要素便可随时求出 任一元素的地址(这样数组中的任一元素便可以随机存取! 任一元素的地址(这样数组中的任一元素便可以随机存取!): ①开始结点的存放地址(即基地址) 开始结点的存放地址(即基地址) 维数和每维的上、下界; ②维数和每维的上、下界; ac1,c2 … ac1,d2 ③每个数组元素所占用的单元数 Amn= … aij … ad1,c2 … ad1,d2 则行优先存储时的地址公式为: 行优先存储时的地址公式为: 存储时的地址公式为 LOC(aij)=LOC(ac1,c2)+[(i-c1)*(d2-c2+1)+j-c2)]*L , aij之前的 数组基址 a 本行前面的

稀疏矩阵三元组快速转置(转poklau123写的很清楚)

稀疏矩阵三元组快速转置(转poklau123写的很清楚)

稀疏矩阵三元组快速转置(转poklau123写的很清楚)关于稀疏矩阵的快速转置法,⾸先得明⽩其是通过对三元表进⾏转置。

如果误以为是对矩阵进⾏转置,毫⽆疑问就算你想破脑袋也想不出个所以然,别陷⼊死胡同了!对于⼀个三元表,⾏为i,列为j,值为v。

需将其i与j的值对调才能得到新的三元表,但是如果直接进⾏转换,得到的新的三元表的顺序是混乱的,不符合三元表的规则。

所以,课本⾸先介绍了⼀个⽤扫描来转置的算法(这个算法⽐较容易,在这⾥我就不说了),但是这个转置算法的时间复杂度太⾼,于是就有了接下来的快速转置算法。

要你对⼀个三元表进⾏步骤最少的转置,你可能会想,如果知道三元表中每⼀项在转置后的新的三元表中的位置,然后直接放进去,岂不是极⼤的缩⼩了时间复杂度?没错!快速转置法正是基于这种思想⽽设计的。

那么如何知道三元表中某⼀项的位置呢?在课本98页的a.data这个三元表可以看到,j为列号,在转置后即为新的三元表的⾏号,三元表正是按照⾏序进⾏排列的,⽽j=1有2个、j=2有2个、j=3有2个、j=4有1个、j=6有1个。

根据这些数据按照从⼩到⼤排列,j=1的项在新的三元表中应占据第1、2位,j=2的项在新的三元表中应占据第3、4位,j=3的项在新的三元表中应占据第5、6位,j=4应占据第7位,j=6应占据第8位。

接下来就轻松多了,转置的时候直接从第⼀项读起,读取其j值,⽐如课本中a.data这个三元表的第⼀项的j值为2,因为j=2占据第3、4位,所以应该从第三位开始放,接下来如果读取的某⼀项的j值也是2,就放在第4位。

因为j=2的项只有两个,所以第5位绝对不会被j=2的项占据,第5、6项本来就是留给j=3的。

再⽐如当读到j=6的那项时,第8位是留给它的,就可以直接放进第8位了。

这样,读取每⼀项,都能在三元表中找到相应的位置,这就是稀疏矩阵快速转置的原理。

当然,上⾯只是快速转置的原理,要实现它,就要设计算法来实现了。

三元组表示稀疏矩阵的转置(一般算法和快速算法)

三元组表示稀疏矩阵的转置(一般算法和快速算法)

三元组表示稀疏矩阵的转置(一般算法和快速算法)一、设计要求1.1 问题描述稀疏矩阵是指那些多数元素为零的矩阵。

利用稀疏特点进行存储和计算可以大大节省存储空间,提高计算效率。

求一个稀疏矩阵A的转置矩阵B。

1.2需求分析(1)以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现稀疏矩阵的转置运算。

(2)稀疏矩阵的输入形式采用三元组表示,运算结果则以通常的阵列形式列出。

(3)首先提示用户输入矩阵的行数、列数、非零元个数,再采用三元组表示方法输入矩阵,然后进行转置运算,该系统可以采用两种方法,一种为一般算法,另一种为快速转置算法。

(4)程序需要给出菜单项,用户按照菜单提示进行相应的操作。

二、概要设计2.1存储结构设计采用“带行逻辑链接信息”的三元组顺序表表示矩阵的存储结构。

三元组定义为:typedef struct{int i; //非零元的行下标int j; //非零元的列下标 ElemType e; //非零元素值}Triple; 矩阵定义为: Typedef struct{Triple data[MAXSIZE+1]; //非零元三元组表int rpos[MAXRC+1]; //各行第一个非零元的位置表 int mu,nu,tu; //矩阵的行数、列数和非零元个数 }RLSMatrix;例如有矩阵A,它与其三元组表的对应关系如图2.2 系统功能设计本系统通过菜单提示用户首先选择稀疏矩阵转置方法,然后提示用户采用三元组表示法输入数据创建一个稀疏矩阵,再进行矩阵的转置操作,并以通常的阵列形式输出结果。

主要实现以下功能。

(1)创建稀疏矩阵。

采用带行逻辑连接信息的三元组表表示法,提示用户输入矩阵的行数、列数、非零元个数以及各非零元所在的行、列、值。

(2)矩阵转置。

<1>采用一般算法进行矩阵的转置操作,再以阵列形式输出转置矩阵B。

<2>采用快速转置的方法完成此操作,并以阵列形式输出转置矩阵B。

稀疏矩阵的三元组顺序表存储表示及其转置算法

稀疏矩阵的三元组顺序表存储表示及其转置算法

稀疏矩阵的三元组顺序表存储表示及其转置算法目录1. 引言1.1 背景和意义1.2 结构概述1.3 目的2. 稀疏矩阵的三元组顺序表存储表示2.1 稀疏矩阵的定义与特点2.2 三元组顺序表的数据结构和实现方式2.3 存储表示的优缺点分析3. 稀疏矩阵转置算法3.1 转置操作的意义与应用场景3.2 基于三元组顺序表的转置算法设计思路3.3 转置算法的具体实现步骤与复杂度分析4. 实验与结果分析4.1 实验设置和数据样本介绍4.2 转置算法在不同稀疏矩阵上的性能评估和结果比较4.3 分析结果及启示与讨论5. 结论与展望5.1 结论总结5.2 存在问题及后续工作展望1. 引言1.1 背景和意义稀疏矩阵是一种在实际问题中经常遇到的特殊矩阵结构,其绝大部分元素为零。

与稠密矩阵相比,稀疏矩阵的存储和计算效率更高。

稀疏矩阵可以应用于图像处理、网络分析、线性代数等领域。

三元组顺序表是一种存储稀疏矩阵的数据结构,通过记录非零元素的行索引、列索引和数值,有效地减少了存储空间。

同时,三元组顺序表也提供了便捷的转置操作方式。

因此,深入掌握稀疏矩阵的三元组顺序表存储表示及其转置算法对于提高稀疏矩阵相关问题的解决效率具有重要意义。

1.2 结构概述本文将从两个方面进行论述。

首先,介绍稀疏矩阵的定义与特点,以及三元组顺序表在存储表示中所采用的数据结构和实现方式。

其次,详细描述了基于三元组顺序表的稀疏矩阵转置算法的设计思路、具体实现步骤和复杂度分析。

1.3 目的本文旨在探究稀疏矩阵的三元组顺序表存储表示及其转置算法,在理论层面上深入分析其原理和优劣,并在实验中验证其性能表现。

通过本文的研究,我们希望能够提供一种高效、灵活且易于实现的方法来处理稀疏矩阵,并为进一步的相关应用提供有价值的启示和参考。

2. 稀疏矩阵的三元组顺序表存储表示2.1 稀疏矩阵的定义与特点稀疏矩阵是指在一个二维矩阵中,大部分元素都为0的情况下,只有少数非零元素的情况。

矩阵转置

矩阵转置

下面就是(算式1)式中矩阵M的(5行6列共有)8个非零元素的三元组表示:
{ (1,1, 8), (1,3, 9) , (2,2,2) , (3,4,3) , (3,6,7) , (4,1,6) , (4,3,4) , (5,4,5)}
若以某种方式(以行为主或以列为主的顺序)将8个三元组排列起来,再加上一个表示矩阵M的行数,列数及非零元素的个数的特殊的三元组(5,6,8),则所形成的表就能唯一地确定稀疏矩阵。
5.快速转置算法程序:
void fastran(Spmatrix a,Spmatrix *b)
{ int k,p,q,col;
int num[10],pot[10];
b->m=a.n; b->n=a.m; b->t=a.t;
if (a.t!=0)
普通算法分析:按b.data中三元组的次序进行转置。也就是说,按照矩阵M的列序进行转置。显然,为了找到M中的每一列的所有的非零元素,需要对a.data从第1行起整个扫描一遍。由于a.data是以M的行序来存放每一个非零元素的,因此,这样得到的顺序恰好是b.data应有的顺序。其具体算法描述如下:
矩阵的转置运算是变换元素的位置,把位于(i, j)的元素换到(j, i)位置上。也就是说,把元素的行和列对换。所以一个m×n的矩阵M,它的转置矩阵是一个n×m的矩阵,且N[i,j]=M[j,i],其中,1≤i≤n,1≤j≤m。例如, (算式1)中的矩阵N就是矩阵M的转置矩阵,矩阵N也是一个稀疏矩阵,其非零元素的排列情况如表-1(b)所示。求矩阵M的转置矩阵N,实际上就是由表-1(a)求表-1(b)。
这比直接用二维数组表示矩阵的转置算法的时间量级O(m*n)要差。不难看出,此算法之所以耗费时间,问题在于其每形成转置矩阵的一行,都必须对a.data从头到尾扫描一遍。能否对a.data只扫描一次,又不引起元素的移动就能得到要求的b->data呢?为此,我们可使用另一种快速方法。

【免费下载】用三元组表存储表示求稀疏矩阵M转置函数T

【免费下载】用三元组表存储表示求稀疏矩阵M转置函数T
k=1; }while(k); (*M).data[i].i=m; (*M).data[i].j=n; (*M).data[i].e=e; } printf("\n"); return 1; }
//输出稀疏矩阵 M void PrintSMatrix(TSMatrix M) {
int i; printf("**************************************\n"); for(i=1;i<=M.tu;i++)
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

实验四稀疏矩阵三元组下转置

实验四稀疏矩阵三元组下转置

实验四、稀疏矩阵三元组下转置一、实验内容将稀疏矩阵中的每个非零元素aij表示为(i, j, v),即(行号,列号,非零元素值).称为三元组表示法。

用结构类型来描述三元组。

将稀疏矩阵的非零元素对应的三元组所构成的集合,按行优先的顺序排列成一个线性表。

在稀疏矩阵用三元组顺序表存储结构下,实现稀疏矩阵转置,得到其转置矩阵的三元组顺序表存储表示。

要求:1)采用转置算法Ⅰ:直接取,顺序存2)采用转置算法Ⅱ:顺序取,直接存。

要使用两个辅助一维数组,分别先计算出原矩阵每一列的非零元个数以及每一列的第一个非零元在转置矩阵的三元组顺序表中的存储位置。

二、实验目的1. 掌握稀疏矩阵的三元组顺序表存储结构;2. 掌握稀疏矩阵转置算法Ⅰ;3. 掌握稀疏矩阵转置算法Ⅱ三、实验代码//文件:SparseMatrix.htemplate <class T>struct element{int row, col; //行数、列数T item; //元素值};const int MaxTerm=100;template <class T>class SparseMatrix{ public:SparseMatrix(){};SparseMatrix(int intmu,int intnu,int inttu,element<T> datatemp[]);//有参构造函数,初始化稀疏矩阵~SparseMatrix(){}; //析构函数,释放存储空间element<T> GetMatrix(int intnumber);//输出下标对应的数组元素void Prt();//显示三元组顺序表void Trans1(SparseMatrix<T> &B);//直接取、顺序存的矩阵转置算法void Trans2(SparseMatrix<T> A, SparseMatrix<T> &B);//顺序取、直接存的矩阵转置算法private:element<T> data[MaxTerm]; //矩阵非零元素int mu, nu, tu; //行数、列数、非零元个数};// 文件:SparseMatrix.cpp#include "SparseMatrix.h" //引用三元组顺序表的头文件#include <string> //引用string库函数的头文件using namespace std;//指出后续的所有的程序语句都在名字空间std内/*前置条件:三元组顺序表不存在输入:三元组顺序表的行数(intmu)、列数(intnu)、非零元个数(inttu)、初始三元组(datatemp[])功能:三元组顺序表的初始化输出:无后置条件:建立一个三元组顺序表*/template <class T>SparseMatrix<T>::SparseMatrix(int intmu,int intnu,int inttu,element<T> datatemp[]){if (inttu >MaxTerm ) throw "构造函数的初始化参数不正确";mu = intmu;nu = intnu;tu = inttu;for(int i=0;i<inttu;i++){data[i] = datatemp[i];}}/*前置条件:三元组顺序表已存在输入:下标(intnumber)功能:读取这组下标对应的数组元素输出:对应元素后置条件:三元组顺序表不变*/template <class T>element<T> SparseMatrix<T>::GetMatrix(int intnumber){if(intnumber>=tu || intnumber < 0) throw "输入位置不正确";return data[i];}/*前置条件:无输入:无功能:显示三元组顺序表输出:无后置条件:建立一个三元组顺序表*/template <class T>void SparseMatrix<T>::Prt(){for(int i=0;i<tu;i++){cout<<data[i].row<<" "<<data[i].col<<" "<<data[i].item<<"\n";}}/*前置条件:无输入:待转置的源三元组顺序表(A)和目标三元组顺序表(B)的引用功能:对三元组顺序表进行转置输出:无后置条件:三元组顺序表A的转置结果放在了B中*/template <class T>void SparseMatrix<T>::Trans1(SparseMatrix<T> &B){int pb,pa;B.mu=this->nu; B.nu=this->mu; B.tu=this->tu;//设置行数、列数、非零元素个数 if (B.tu>0) //有非零元素则转换{pb = 0;for (int col=0; col<this->nu; col++) //依次考察每一列 for (pa=0; pa<this->tu; pa++) //在A中扫描整个三元组表if (this->data[pa].col==col ) //处理col列元素{B.data[pb].row= this->data[pa].col ;B.data[pb].col= this->data[pa].row ;B.data[pb].item= this->data[pa].item;pb++;}}}/*前置条件:无输入:待转置的源三元组顺序表(A)和目标三元组顺序表(B)的引用功能:对三元组顺序表进行转置输出:无后置条件:三元组顺序表A的转置结果放在了B中*/template <class T>void SparseMatrix<T>::Trans2(SparseMatrix<T> A, SparseMatrix<T> &B){int i,j,k,num[MaxTerm],cpot[MaxTerm];B.mu=A.nu; B.nu=A.mu; B.tu=A.tu;//设置行数、列数、元素个数if (B.tu>0) //有非零元素则转换{for (i=0; i<A.nu; i++) num[i]=0; //A中每一列非零元素的个数初始化为0 for (i=0; i<A.tu; i++)//求矩阵A中每一列非零元素的个数{ j= A.data[i].col; //取三元组的列号num[j]++;}cpot[0]=0; //A中第0列第一个非零元素在B中的位置为0for (i=1; i<A.nu; i++) //求A中每一列第一个非零元素在B中的下标cpot[i]= cpot[i-1]+num[i-1];for (i=0; i<A.tu; i++)//扫描三元组表A{j=A.data[i].col; //当前三元组的列号k=cpot[j]; //当前三元组在B中的下标B.data[k].row= A.data[i].col ;B.data[k].col= A.data[i].row ;B.data[k].item= A.data[i].item;cpot[j]++; //预置同一列的下一个三元组的下标}}}//文件:SparseMatrixMain.cpp#include <iostream> //引用输入输出流库函数的头文件#include "SparseMatrix.cpp" ////引用广义表的成员函数文件#include <string> //引用string库函数的头文件using namespace std; //指出后续的所有的程序语句都在名字空间std内int main(){try{//建立一个element<int>类型的数组(A)element<int> A[7]={{0,0,15},{0,3,22},{0,5,-15},{1,1,11},{1,2,3},{2,3,6},{4,0,91}};SparseMatrix<int> sparsematrixB;//构造三元组顺序表来存储转置后的三元组顺序表 SparseMatrix<int> sparsematrixA(5,6,7,A);//构造三元组顺序表cout<<"原三元组顺序表如下:"<<"\n";sparsematrixA.Prt();//显示三元组顺序表sparsematrixA.Trans1(sparsematrixB);cout<<"使用直接取、顺序存转置算法转置后的三元组顺序表如下:"<<"\n";sparsematrixB.Prt();//显示三元组顺序表sparsematrixA.Trans2(sparsematrixA,sparsematrixB);cout<<"使用顺序取、直接存转置算法转置后的三元组顺序表如下:"<<"\n";sparsematrixB.Prt();//显示三元组顺序表}catch(char* e){ cout<<e; }return 0;}四、调试和运行结果在完成算法的程序实现后,用任意的一组数据来加以测试运行,对运行结果加以分析,检查运行结果是否正确。

稀疏矩阵快速转置

稀疏矩阵快速转置

题目:假设稀疏矩阵A采用三元组表表示,编写程序实现该矩阵的快速转置要求:输入一个稀疏矩阵A,由程序将其转换成三元组表存储;转置后的三元组表,由程序将其转换成矩阵形式后输出。

一、需求分析1.用户可以根据自己的需求输入任意一个稀疏矩阵,通过程序将其转换成三元组存储方式;2.并且能够完成矩阵的转置功能,要求需要使用的方法是快速转置的方法。

3.最后要够显示原矩阵和转置后的矩阵让用户能进行比较。

4.程序执行的命令包括:(1)构造稀疏矩阵M (2)求转转矩阵T (3)显示(打印)矩阵二、概要设计⒈为实现上述算法,需要线性表的抽象数据类型:ADT SparseMatrix {数据对象:D={aij :|aij∈TermSet,i=1…m,m≥0,j=1…n,n≥0 m和n分别成为矩阵的行数和列数 }数据关系:R={Row,Col}Row ={<ai,j ,ai,j+1>|1≤i≤m,1≤j≤n-1 }Col ={<ai,j ,ai+1,j>|1≤i≤m-1,1≤j≤n }基本操作:CreateSMtrix(& M)操作结果:创建稀疏矩阵M。

DestroySMaix(&M)初始条件:稀疏矩阵M已存在。

操作结果:销毁稀疏矩阵M。

PrintSMatrix(L)初始条件:稀疏矩阵M已经存在。

操作结果:输出稀疏矩阵M。

CopySMatrix(M,&T)初始条件:稀疏矩阵M已经存在。

操作结果:由稀疏矩阵M复制得到T。

TransposeSMatrix(M,&T)初始条件:稀疏矩阵M已经存在。

操作结果:求稀疏矩阵M的转转矩阵T。

}ADT SparseMatrix2. 本程序有三个模块:⑴主程序模块main(){初始化;{接受命令;显示结果;}}⑵矩阵压缩存储单元模块:实现链表抽象数据类型操作,即函数的定义模块;三、详细设计⒈元素类型,结点类型typedef struct {int i,j;int e;}Triple;typedef struct{Triple data[MAXSIZE+1];int mu,nu,tu;} Tsmatrix;2.对抽象数据类型中的部分基本操作的伪码算法如下:Tsmatrix * creatarray(Tsmatrix *M){ int m,n,p=1;int c;printf("please input the array A:\n");for(m=1;m<=a;m++)for(n=1;n<=b;n++){ scanf("%d",&c);if(c!=0){ M->data[p].e=c;M->data[p].i=m;M->data[p].j=n;p++;}}M->tu=p; M->mu=a; M->nu=b;printf("yuan lai san yuan zu de biao shi wei :\n\n");for(m=1;m<=M->tu;m++)printf("%3d%3d%3d\t",M->data[m].i,M->data[m].j,M->data[m].e);printf("\n");return M;}/*三元组快速转置*/Tsmatrix * fasttrans(Tsmatrix *M,Tsmatrix *T){ int p,col,q,t,m;int num[100];int cpot[100];T->mu=M->nu; T->nu=M->mu; T->tu=M->tu;if(T->tu!=0){for(col=1;col<=M->nu;col++) num[col]=0;for(t=1;t<=M->tu;t++) ++num[M->data[t].j];cpot[1]=1;for(col=2;col<=M->nu;col++) cpot[col]=cpot[col-1]+num[col-1];for(p=1;p<=M->tu;++p){ col=M->data[p].j; q=cpot[col];T->data[q].i=M->data[p].j;T->data[q].j=M->data[p].i;T->data[q].e=M->data[p].e;++cpot[col];}}printf("\n\nzhuan zhi hou de san yuan zu biao shi wei :\n\n");for(m=1;m<=T->tu;m++)printf("%3d%3d%3d\t",T->data[m].i,T->data[m].j,T->data[m].e);printf("\n");return T;}/*输出三元组函数*/void print(Tsmatrix *T,int x,int y){ int m,n,p=1;int d;for(m=1;m<=x;m++){ printf("\n");for(n=1;n<=y;n++){ if(T->data[p].i==m&&T->data[p].j==n){ d=T->data[p].e;p++;}else d=0;printf("%6d",d);}}}}3.主函数和其他函数的伪码算法void main(){ Tsmatrix *M,*T;M=(Tsmatrix *)malloc(sizeof(Tsmatrix));T=(Tsmatrix *)malloc(sizeof(Tsmatrix));printf("please input array's row and col:\n");scanf("%d%d",&a,&b); /*输入行列数*/M=creatarray(M); /*创建稀疏矩阵*/printf("you had creat the array:\n");print(M,a,b); /*输出创建好的三元组*/T=fasttrans(M,T); /*将三元组转置*/printf("the trans array is:\n");print(T,b,a);getch();}4 函数调用关系四、调试分析⒈在定义变量的时候,我运用动了整型的全局变量a和b。

数据结构期末试题及标准答案

数据结构期末试题及标准答案

计算机科学与技术、网络工程本科《数据结构》期末考试试卷一、选择题(单选题,每小题 3分,共33分)1. 已知某二叉树的中序、层序序列分别为DBAFCE 、FDEBCA ,则该二叉树的后序序列为 ______ 。

A . BCDEAFB . ABDCEFC . DBACEFD . DABECF2•在11个元素的有序表A[1…11]中进行折半查找((low high)/2 ),查找元素A[11]时,被比较的元素的下标依次是 _________ 。

A . 6, 8, 10, 11B . 6, 9, 10, 11C . 6, 7, 9, 11D . 6, 8, 9,113 •由元素序列(27, 16 , 75 , 38 , 51 )构造平衡二叉树,则首次出现的最小不平衡子 树的根(即离插入结点最近且平衡因子的绝对值为2的结点)为 ________ 。

A . 27B . 38C. 51D . 754 .利用逐点插入法建立序列(50 , 72 , 43 , 85 , 75 , 20 , 35 , 45 , 65 , 30)对应的 二叉排序树以后,查找元素 30要进行 _______ 次元素间的比较。

A . 4B . 5C . 6D . 75 .循环链表的主要优点是 _____ 。

A .不再需要头指针了B .已知某个结点的位置后,很容易找到它的直接前驱结点C .在进行删除后,能保证链表不断开D .从表中任一结点出发都能遍历整个链表6 .已知一个线性表(38 , 25, 74 , 63 , 52 , 48),假定采用散列函数 h ( key ) =key%7 计算散列地址,并散列存储在散列表A[0…6]中,若采用线性探测方法解决冲突,则在该散列表上进行等概率查找时查找成功的平均查找长度为 ___________ 。

A . 1 . 5B . 1 . 7C . 2.0 D . 2.3 7 .由权值为 9 , 2 , 5 , 7 的四个叶子结点构造 棵哈夫曼树, 该树的带权路径长度&在最好和最坏情况下的时间复杂度均为A .基数排序B .快速排序C .堆排序9.无向图 G=(V , E),其中 V={a , b , c , d , e , e ),(c , f ), (f , d), (e , d)}。

数据结构-稀疏矩阵的三元组表存储方法

数据结构-稀疏矩阵的三元组表存储方法

a .data 3 3 1 -3
b .data 3 2 1 12
a .data 4 3 6 14 求得 b .data 4 2 5 18
a .data 5 a .data 6 a .data 7
4 3 24
5 2 18 无!
6 1 15
b .data 5 b .data 6 b .data 7
31 9 3 4 24 4 6 -7
b .data 2 1 6 15
a .data 3 3 1 -3
b .data 3 2 1 12
a .data 4 3 6 14 求解 b .data 4 2 5 18
a .data 5 4 3 24
b .data 5 3 1 9
a .data 6 5 2 18
b .data 6 3 4 24
a .data 7 6 1 15
a .data 5 4 3 24
b .data 5
a .data 6 5 2 18
b .data 6
a .data 7 6 1 15
b .data 7
a .data 8 6 4 -7
b .data 8
a. mu=6 a. nu=7 a. tu=8 注:p=1:8,寻找 j=col 的a.data[ p]
a .data 2 1 3 9 Col=6 b .data 2 1 6 15
a .data 3 a .data 4
3 1 -3
b .data 3
3 6 14 求得 b .data 4
2 1 12 2 5 18
a .data 5 4 3 24
b .data 5 3 1 9
a .data 6 5 2 18
2.求解步骤分析:p=1:8, q的值=7

数据结构---三元组顺序表------稀疏矩阵的转置和快速转置

数据结构---三元组顺序表------稀疏矩阵的转置和快速转置
scanf("%d",&M.data[i].i);
getchar();
}
printf("输入该非零元的列数:");
scanf("%d",&M.data[i].j);
getchar();
while(M.data[i].j>M.mn||M.data[i].j<1)
{
printf("输入的列数不合法\n请重新输入列数:");
scanf("%d",&M.data[i].e);
getchar();
printf("输入该非零元的行数:");
scanf("%d",&M.data[i].i);
getchar();
while(M.data[i].i>M.mu||M.data[i].i<1)
{
printf("输入的行数不合法\n请重新输入行数:");
scanf("%d",&M.mu);
getchar();
printf("\nmn=");
scanf("%d",&M.mn);
getchar();
printf("\ntu=");
scanf("%d",&M.tu);
getchar();
if(M.tu>maxsize)
{
printf("非零元个数已超过定义的值\n请重新输入tu=");if(M.daa[k].j==i){
T.data[j].e=M.data[k].e;

三元组法存储稀疏矩阵

三元组法存储稀疏矩阵

三元组法存储稀疏矩阵
稀疏矩阵是指其中大部分元素都为0的矩阵。

在计算机科学中,稀疏矩阵可以使用三元组法进行存储,以节省内存空间。

三元组法是指将稀疏矩阵中非零元素的行、列和值依次存储在一个三元组中。

具体来说,对于一个m行n列的稀疏矩阵A,可以使用一个大小为k*3的三元组T来存储。

其中,k是非零元素的个数。

三元组T中的每一行即可表示一个非零元素的位置和值。

例如,对于如下的3*3稀疏矩阵:
| 0 0 0|
| 0 5 0|
| 0 0 0|
其三元组表示如下:
| 2 2 5|
其中,第一列表示非零元素在第2行,第二列表示非零元素在第2列,第三列表示非零元素的值为5。

三元组法的优点在于节省了内存空间,并且存储和访问操作较为高效。

但是,对于密集矩阵来说,使用三元组法存储反而会更加浪费空间。

关于如何将稀疏矩阵转换为三元组,可以采用行逐一法或列逐一法。

对于行逐一法,可以先确定每一行非零元素的个数,然后按照行的顺序依次存储对应的三元组。

对于列逐一法,可以先确定每一列非零元素的个数,然后按照列的顺序依次存储对应的三元组。

总之,三元组法是一种方便高效的稀疏矩阵存储方式。

在实际应用中,可以根据具体情况选择是否采用该方法。

实现稀疏矩阵采用三元组表示的基本运算实验报告

实现稀疏矩阵采用三元组表示的基本运算实验报告

实现稀疏矩阵(采用三元组表示)的基本运算实验报告实现稀疏矩阵(采用三元组表示)的基本运算实验报告一实验题目: 实现稀疏矩阵(采用三元组表示)的基本运算二实验要求:(1)生成如下两个稀疏矩阵的三元组a 和 b;(上机实验指导 P92 )(2)输出 a 转置矩阵的三元组;(3)输出a + b 的三元组;(4)输出 a * b 的三元组;三实验内容:3.1 稀疏矩阵的抽象数据类型:ADT SparseMatrix {数据对象:D={aij| i = 1,2,3,….,m; j =1,2,3,……,n;ai,j∈ElemSet,m 和n分别称为矩阵的行数和列数 }数据关系 : R={ Row , Col }Row ={<ai,j ,ai,j+1> | 1≤ i≤m , 1≤ j ≤ n-1}Col ={<a i,j , a i+1,j >| 1≤i≤m-1,1≤j ≤n}基本操作:CreateSMatrix(&M)操作结果:创建稀疏矩阵M PrintSMatrix(M)初始条件:稀疏矩阵M已经存在操作结果:打印矩阵M DestroySMatrix(&M)初始条件:稀疏矩阵M已经存在操作结果:销毁矩阵M CopySMatrix(M, &T)初始条件:稀疏矩阵M已经存在操作结果:复制矩阵M到TAddSMatrix(M, N, &Q)初始条件:稀疏矩阵M、N已经存在操作结果:求矩阵的和Q=M+N SubSMatrix(M, N, &Q)初始条件:稀疏矩阵M、N已经存在操作结果:求矩阵的差Q=M-N TransposeSMatrix(M, & T)初始条件:稀疏矩阵M已经存在操作结果:求矩阵M的转置T MultSMatrix(M, N, &Q)初始条件:稀疏矩阵M已经存在操作结果:求矩阵的积Q=M*N }ADT SparseMatrix3.2存储结构的定义#define N 4typedef int ElemType;#define MaxSize 100 //矩阵中非零元素最多个数typedef struct{ int r; //行号int c; //列号ElemType d; //元素值} TupNode; //三元组定义typedef struct{ int rows; //行数值int cols; //列数值int nums; //非零元素个数TupNode data[MaxSize];} TSMatrix; //三元组顺序表定义3.3基本操作实现:void CreatMat(TSMatrix &t,ElemType A[N][N]){int i,j;t.rows=N;t.cols=N;t.nums=0;for (i=0;i<N;i++){for (j=0;j<N;j++)if (A[i][j]!=0){t.data[t.nums].r=i;t.data[t.nu ms].c=j;t.data[t.nums].d=A[i][j];t.nums++;}}}void DispMat(TSMatrix t){int i;if (t.nums<=0)return;printf("\t%d\t%d\t%d\n",t.rows ,t.cols,t.nums);printf("\t------------------\n ");for (i=0;i<t.nums;i++)printf("\t%d\t%d\t%d\n",t.data[i] .r,t.data[i].c,t.data[i].d);3.4解题思路:1.转置矩阵:只要判定原矩阵有值,那么只要遍历一遍原矩阵,把原来矩阵中非0元素行列变换一下赋值到新的矩阵中即可。

三元组表示稀疏矩阵转置

三元组表示稀疏矩阵转置

三元组表示稀疏矩阵转置
随着时代的进步,互联网已经深入到了我们的各个层面,其成功的关键之一就
在于数据处理技术。

稀疏矩阵转置是构成这一技术的基础之一,主要目的是改变二维矩阵的行和列。

这里要介绍的是一种特殊的“三元组表示稀疏矩阵转置”技术,它可以更加高效地将变换后的矩阵存储在硬盘上以便以后可以重用。

三元组表示稀疏矩阵转置处理的思路是,首先,将需要转置的稀疏矩阵以一个“非零元素”列表的形式读入,记为(row,col,data),其中row表示该非零元素所
处的行数,col表示列数,data表示该非零元素的值;然后,根据row和col的值,计算变换后的稀疏矩阵的最终坐标依次给出(col,row);最后,将所有非零元素的
坐标以及对应的值,按照升序排序,用“三元组表示形式”写入硬盘中以作备份。

三元组表示稀疏矩阵转置也是一种特殊的“非零元素”列表构建技术。

它把矩
阵转换成一系列索引型(index type)的非零元素数据,这既可以更加有效地把变换后的矩阵存储起来,也可以有效地提高运算效率,避免无谓的存储和消耗。

从长远来看,三元组表示稀疏矩阵转置无疑是一种重要的数据技术,它的成功
不仅取决于它的有效简便度,而且取决于它有助于改善计算处理效率,提高输出效果,从而使数据技术更为可靠,有助于推动信息革命更大范围的发展。

三元组结构实现稀疏矩阵转置算法的分析

三元组结构实现稀疏矩阵转置算法的分析

三元组结构实现稀疏矩阵转置算法的分析文章简要叙述了稀疏矩阵压缩存储的三元组表示法及其基于此种结构的矩阵的转置运算。

探讨了基于三元组结构的矩阵转置算法的具体实现方法及其时空复杂度的问题。

【关键词】稀疏矩阵压缩存储三元组转置算法在一些特殊矩阵中,如对称矩阵和上下三角矩阵,非零元素一般都有明显的规律,从而都可以压缩到一维数组里面,然而,实际应用中经常会遇到这样一些矩阵,它们非零元素少,且分布不均匀,且没有明显的规律,称之为稀疏矩阵。

按照压缩存储的思想,只需存储矩阵中的非零元素。

为了便于存取和检索,一般在存储的时候必须带有合适的辅助信息,即同时记录下它所在的行列的位置等等。

在实际应用中,一般我们采取的是用三元组和十字链表两种表示方法来实现稀疏矩阵的存储及其运算。

稀疏矩阵在数值计算、电力系统的潮流计算、天气预报、工程分析计算等方面都有着大量的应用,不少实际问题都可以转化为对稀疏矩阵的计算问题。

了解稀疏矩阵的各种操作变得尤为重要。

1 基本概念设矩阵中有t个非零元素,若t远远小于矩阵元素的总数,则称该矩阵为稀疏矩阵。

通常,在m×n 的矩阵中,存在t个非零元素。

设δ= t/(m*n),则称δ为矩阵的稀疏因子,一般认为当δ≤0.05时为稀疏矩阵。

在存储稀疏矩阵时,为了节约存储单元,很自然的压缩方法就是只存储非零元素,但由于非零元素的分布一般是没有规律的,因此在存储非零元素的同时,还必须存储相应的辅助信息,才能准确迅速确定一个非零元素是矩阵中的哪一个元素。

最简单的办法就是将非零元素的值和它所在的行列号作为一个结点存放到一起,于是矩阵中的每一个非零元素就由一个三元组(i,j,aij)唯一确定。

显然,稀疏矩阵的压缩存储方法会让其失去随机存取功能。

2 三元组表示稀疏矩阵转置算法的实现用三元组来表示非零元素时稀疏矩阵的压缩存储方法的具体数据类型说明如下:三元组表示的稀疏矩阵,如何实现转置算法呢?矩阵的转置是基本的矩阵运算,对于一个m×n 的矩阵M,它的转置N是一个n×m 的矩阵,且有N(i,j)=M(j,i)。

稀疏矩阵三元数组的转置

稀疏矩阵三元数组的转置

#include <iostream.h>#define SIZE 100typedef struct Triple //构造三元组结构体{int x,y;int e;};typedef struct TSMatrix{Triple date[SIZE];int mu,nu,tu; //行数,列数,非零元素个数};void transARtoTS(int Matrix[][7],int x,TSMatrix &T) //把矩阵转换为三元组{T.tu=0;T.mu=x;T.nu=7; //初始化for(int i=0;i<x;i++)for(int j=0;j<7;j++){if(Matrix[i][j]){T.date[T.tu].x=i;T.date[T.tu].y=j;T.date[T.tu].e=Matrix[i][j];T.tu++;}}}bool transTStoTS(TSMatrix T,TSMatrix &M) //把原矩阵对应的三元组转变为转置矩阵对应的三元组{int num[SIZE],cpot[SIZE];M.mu=T.nu;M.nu=T.mu;M.tu=T.tu;//设置行数,列数,元素个数if(M.tu){int i,j,k;for(i=0;i<T.nu;i++)num[i]=0;for(i=0;i<T.tu;i++){j=T.date[i].y;num[j]++;}cpot[0]=0;for(i=1;i<T.nu;i++)cpot[i]=cpot[i-1]+num[i-1];for(i=0;i<T.tu;i++){j=T.date[i].y;k=cpot[j];M.date[k].x=T.date[i].y;M.date[k].y=T.date[i].x;M.date[k].e=T.date[i].e;cpot[j]++;}}return true;}void transTStoAR(TSMatrix M) //把三元组转化为转置矩阵{int Matrix[7][6]={0};int i,j,k=0;for( i=0;i<7;i++){for(j=0;j<6;j++){if(i==M.date[k].x&&j==M.date[k].y){Matrix[i][j]=M.date[k].e;k++;}}}for( i=0;i<7;i++){for(j=0;j<6;j++){cout<<Matrix[i][j]<<'\t';}cout<<'\n';}}void main(){int Matrix[6][7]={0};TSMatrix T,M;Matrix[2][0]=-3;Matrix[5][0]=15;Matrix[0][1]=12;Matrix[4][1]=18; //构造矩阵Matrix[0][2]=9;Matrix[3][2]=24;Matrix[5][3]=-7;Matrix[2][5]=14;cout<<"原矩阵为:"<<'\n';for(int i=0;i<6;i++){for(int j=0;j<7;j++){cout<<Matrix[i][j]<<'\t';}cout<<'\n';}transARtoTS(Matrix,6,T);transTStoTS(T,M);cout<<"转置后为:"<<'\n';transTStoAR(M);}。

用三元组表存储表示,求稀疏矩阵M转置函数T

用三元组表存储表示,求稀疏矩阵M转置函数T

用三元组表存储表示,求稀疏矩阵M转置函数T 实验目的利用三重表存储表示,得到稀疏矩阵M的转置函数T实验内容在计算机上编程和调试。

采用三元组表存储表示,求稀疏矩阵m转置函数t编程//采用三元组表存储表示,求稀疏矩阵m转置函数t#包括#definemaxsize100typedefstruct{inti,j;inte;}三部分的typedefstruct{tripledata[maxsize+1];intmu,nu,tu;}tsmatrix;//创建稀疏矩阵Mcreatesmatrix(tsmatrix*m){inti,m,n,e,k;printf(\输入矩阵m的行数、列数、非零元的个数(中间用逗号隔开):\scanf(\(*m).data[0].i=0;printf(\for(i=1;i<=(*m).tu;i++){Do{printf(\输入%d个非零元素的行(1~%d)列(1~%d)值和值:\scanf(\k=0;if(m<1||m>(*m).mu||n<1||n>(*m).nu)k=1;if(m//输出稀疏矩阵Mvoidprintsmatrix(tsmatrixm){inti;printf(\for(i=1;i<=m.tu;i++)printf(\printf(\p rintf(\}//求稀疏矩阵M的转置矩阵tvoidtransposesmatrix(tsmatrixm,tsmatrix*t){intp,q,col;(*t).mu=m.nu;(*t).nu=m.m u;(*t).tu=m.tu;if((*t).tu){q=1;for(col=1;col<=m.nu;++col)对于(p=1;p<=m.tu;++p)如果(m.data[p].j==col){(*t).data[q].i=m.data[p].j;(*t).data[q].j=m.data[p].i;(*t).data[q].e=m.data[p].e;++q;}返回1;}//打印矩阵函数,以通常形式输出矩阵voidprint(tsmatrixa){intk=1,a,b;intm[maxsize][maxsize];printf(\非零元素所对应的位置:\\n\printf(\for(a=0;a)printf(\printf(\}//Main函数intmain(){tsmatrixm,t;printf(\创建矩阵m:\createsmatrix(&m);printf(\矩阵m的三元组表为:\\n\printsmatrix(m);print(m);transposesmatrix(m,&t);printf(\稀疏矩阵m的转换矩阵t的三元组表为:\\n\printsmatrix(t);print(t);printf(\getchar();return0;}运行程序:程序解决方案:1.首先是将程序的开头写好,定义非零元个数最多为100.将非零元素的行下标、列下标和非零元素定义为int类型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验目的
采用三元组表存储表示,求稀疏矩阵M转置函数T
实验内容
编程序并上机调试运行。

采用三元组表存储表示,求稀疏矩阵M转置函数T
编写程序
//采用三元组表存储表示,求稀疏矩阵M转置函数T
#include<stdio.h>
#define MAXSIZE 100
typedef struct
{
int i,j;
int e;
}Triple;
typedef struct
{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
//创建稀疏矩阵M
CreateSMatrix(TSMatrix *M)
{
int i,m,n,e,k;
printf("输入矩阵M的行数、列数、非零元的个数(中间用逗号隔开):");
scanf("%d,%d,%d",&(*M).mu,&(*M).nu,&(*M).tu);
(*M).data[0].i=0;
printf("\n");
for(i=1;i<=(*M).tu;i++)
{
do
{
printf("输入第%d个非零元素所在的行(1~%d)列(1~%d)值以及该数值:",i,(*M).mu,(*M).nu);
scanf("%d,%d,%d",&m,&n,&e);
k=0;
if(m<1||m>(*M).mu||n<1||n>(*M).nu)
k=1;
if(m<(*M).data[i-1].i||m==(*M).data[i-1].i&&n<(*M).data[i-1].j)
k=1;
}while(k);
(*M).data[i].i=m;
(*M).data[i].j=n;
(*M).data[i].e=e;
}
printf("\n");
return 1;
}
//输出稀疏矩阵M
void PrintSMatrix(TSMatrix M)
{
int i;
printf("**************************************\n");
for(i=1;i<=M.tu;i++)
printf("%2d%4d%8d\n",M.data[i].i,M.data[i].j,M.data[i].e);
printf("**************************************\n");
printf("\n");
}
//求稀疏矩阵M的转置矩阵T
void TransposeSMatrix(TSMatrix M,TSMatrix *T)
{
int p,q,col;
(*T).mu=M.nu;
(*T).nu=M.mu;
(*T).tu=M.tu;
if((*T).tu)
{
q=1;
for(col=1;col<=M.nu;++col)
for(p=1;p<=M.tu;++p)
if(M.data[p].j==col)
{ (*T).data[q].i=M.data[p].j;
(*T).data[q].j=M.data[p].i;
(*T).data[q].e=M.data[p].e;
++q;
}
}
return 1;
}
//打印矩阵函数,以通常形式输出矩阵
void print(TSMatrix A)
{
int k=1,a,b;
int M[MAXSIZE][MAXSIZE];
printf("非零元素所对应的位置:\n");
printf("**************************************\n");
for(a=0;a<A.mu;a++)
{
for(b=0;b<A.nu;b++)
M[a][b]=0;
}
while(k<=A.tu)
{
M[A.data[k].i-1][A.data[k].j-1]=A.data[k].e;
k++;
}
for(a=0;a<A.mu;a++)
{
printf(" | ");
for(b=0;b<A.nu;b++)
printf("%d ",M[a][b]);
printf(" | \n");
}
printf("**************************************\n");
printf("\n");
}
//主函数
int main()
{
TSMatrix M,T;
printf("创建矩阵M:");
CreateSMatrix(&M);
printf("矩阵M的三元组表为:\n");
PrintSMatrix(M);
print(M);
TransposeSMatrix(M,&T);
printf("稀疏矩阵M的转换矩阵T的三元组表为:\n");
PrintSMatrix(T);
print(T);
printf("\n\n");
getchar();
return 0;
}
运行程序:
程序解析:
1.首先是将程序的开头写好,定义非零元个数最多为100.
定义非零元的行下标,列下标,和非零元素为int型。

由mu,nu,tu分别代表矩阵的行数,列数和非零元个数。

2.创建稀疏矩阵M。

创建一个稀疏矩阵,用scanf进行用户输入行数,列数及非零元个数。

当i小于等于非零元个数时,进行以下的for循环,执行内循环的循环语句。

当k不为0时,重复执行输入非零元素的行列值以及其值,若超出行数或列数或非零元个数,则跳出循环。

加入外循环,执行外循环的三个语句,直到,i等于非零个数,跳出外循环。

3.输出稀疏矩阵M
用PrintSMatrix函数输出稀疏矩阵,从i等于1循环执行到i等于非零元个数,使非零元的行列数一个一个输出。

4.求稀疏矩阵的转置矩阵。

用TransposeSMatrix函数实现稀疏矩阵M转置为矩阵T。

让T的行等于M的列,T的列等于M的行。

非零元素相等。

当非零元素不等于零时,就执行if语句,if语句中两个for循环和一个if循环实现了MT矩阵行列的对调,按列序求转置。

最后返回1.
5.打印函数,输出非零元素对应的位置
这里定义一个M的数组,当a小于行数数,执行内循环,使b的列数不断增加,赋值为0,在执行外循环,b变为1,执行内循环,在赋值为0,然后再跳出内循环,执行外循环,如此直到,a等于行数则跳出外循环。

执行下面的while语句。

当k<=A的非零元个数时,将非零元素放置到指定的位置。

然后跳出循环执行下面的for语句,结果就可以输出链表状的非零元素。

6.建立main函数。

Main函数直接调用各个函数,在M的后面打印出其普通排列,T后面也打印出其普通排列。

相关文档
最新文档