数组与广义表的算法的实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;