数组与广义表的算法的实验报告

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

数组与广义表的算法

实验工具:visual C++

实验容:1、三元组表示稀疏矩阵的转置算法(一般&快速)<1-7页> 2、稀疏矩阵乘法、加法的算法(一般&十字链表)<8-21页> 3、广义表的各种算法<22-28页> 体验:通过利用visual C++实验工具,实现数组与广义表各类算法的过程中,本人对数组与广义表的知识有了更深的了解,而且认识到数组与广义表各类操作可由形式多样的算法结构实现。算法并非统一标准的,同样的结果可有多种算法得出,算法的编写鼓励创造性思维。

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

代码:

#include

#include

#include

#include

#define OK 1

#define ERROR 0

#define OVERFLOW 0

#define MAXSIZE 100

#define MAXRC 100

typedef int ElemType;

typedef struct

{

int i,j;

ElemType e;

}Triple;

typedef struct

{

Triple data[MAXSIZE+1]; //非零元三元组

int rpos[MAXRC+1]; //各行第一个非零元的位置表

int mu,nu,tu; //矩阵的行数、列数和非零元个数

}RLSMatrix;

CreateSMatrix(RLSMatrix &M) //创建稀疏矩阵M

{

int i,m,n;

ElemType e;

int k,j;

printf("输入矩阵的行数、列数、非零元的个数:");

scanf("%d%d%d",&M.mu,&M.nu,&M.tu);

M.data[0].i=0;

for(i=1;i<=M.tu;i++)

{

j=0;

do

{

j++;

if(j>3) //控制跳出死循环

{

printf("本次输入失败!");

return ERROR;

}

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

k=1;

}while(k);

M.data[i].i=m;

M.data[i].j=n;

M.data[i].e=e;

} //end for

printf("\n");

return(OK);

}

void DestroySMatrix(RLSMatrix &M) //销毁稀疏矩阵M

{

M.mu=0;

M.nu=0;

M.tu=0;

}

void PrinRLSMatrix(RLSMatrix M) //遍历稀疏矩阵M

{

int i;

printf("稀疏矩阵对应的三元组表为:\n\n");

printf("行列元素值、\n\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\n");

}

void print(RLSMatrix A) //打印矩阵函数,以通常形式输出矩阵

{

int k=1,a,b;

printf("稀疏矩阵的通常形式为:\n");

int M[MAXSIZE][MAXSIZE];

for(a=0;a

{

for(b=0;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

{

printf(" | ");

for(b=0;b

printf("%d ",M[a][b]);

printf(" | \n");

}

}

void showtip() //菜单

{

printf(" ********************请选择要执行的操作********************\n\n");

printf(" & 1 采用一般算法实现&\n");

printf(" & 2 采用快速转置的算法实现&\n");

printf(" & 3 同时采用两种算法,先显示一般算法,再显示快速算法&\n");

printf(" **********************************************************\n\n");

}

////头文件结束

TransposeSMatrix(RLSMatrix M,RLSMatrix &T) //求稀疏矩阵M的转置矩阵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)

相关文档
最新文档