当前位置:文档之家› 数据结构实验报告-数组和广义表

数据结构实验报告-数组和广义表

《数据结构》实验报告
实验序号: 7实验项目名称:数组和广义表
学号姓名专业班级
实验地点指导教师实验时间
一、实验目的及要求
本次实验目的是通过上机练习,熟悉和掌握课堂所讲授的基本知识点。

要求
上机以前要认真复习课堂教学内容。

完成稀疏矩阵的三元组顺序存储。

二、实验设备(环境)及要求
计算机;学生不许把食物带到机房吃;不许上网做与实验无关的内容;不许
同学之间聊天;保持实验室安静卫生。

下课把键盘,座椅放回原处。

三、实验内容与步骤
稀疏矩阵压缩存储,三元组顺序表的实现。

然后完成操作CreateSMatrix(&M) 创建稀疏矩阵,和求稀疏矩阵的转置 TransposeSMatrix(TSMatrix &M, TSMatrix &T) 。

编写一个函数,按照矩阵的形式打印出稀疏矩阵。

Header.h
#include<stdio.h>
#include<stdlib.h>
//稀疏矩阵的三元组顺序表存储
#define MAXSIZE 125 //非零元个数的最大值
typedef int ElemType;
typedef struct//三元组节点
{
int i,j;//非零元的行下标、列下标
ElemType e;//矩阵的元素值。

}Triple;
typedef struct
{
Triple data[MAXSIZE+1];//非零元数组,data[0]不用。

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

}TSMatrix;
//-------稀疏矩阵的操作函数-------//
void CreateSMatrix(TSMatrix *M)
//以行为主序,创建稀疏矩阵
{
char sign='y';
int tu;
(*M).tu=0;(*M).mu=0;(*M).nu=0;
printf("请输入矩阵的行数: \n");
scanf("%d",&(*M).mu);
printf("请输入矩阵的列数: \n");
scanf("%d",&(*M).nu);
while(sign=='y')
{
++(*M).tu;
tu=(*M).tu;
printf(" 请输入第 %d个非零元 \n",tu);
printf("\n请输入行号: ");
scanf("%d",&(*M).data[tu].i);
printf("\n请输入列号: ");
scanf("%d",&(*M).data[tu].j);
printf("\n请输入元素值: ");
scanf("%d",&(*M).data[tu].e);
printf("\n\n如果继续输入其他非零元素,请输入字母'y' ,否则请输入 'n' : ");
scanf("%c%c",&sign,&sign);
}
}
void PrintSMatrix(TSMatrix *M)
{
int *p,k,i,j;
int mu,nu,tu;
mu=(*M).mu;nu=(*M).nu;tu=(*M).tu;
p=(int *)malloc((nu+1)*sizeof(ElemType));//用来保存每行元素。

for(i=1;i<=mu;i++)
{
for(k=0;k<=nu;k++) p[k]=0;
for(k=1;k<=tu;k++)
{
if((*M).data[k].i==i)
p[(*M).data[k].j]=(*M).data[k].e;
}
for(j=1;j<=nu;j++) printf("%-5d",p[j]);
printf("\n");
}
}
void TransposeSMatrix(TSMatrix *M,TSMatrix *T) //采用三元组表存储,实现稀疏矩阵的转置。

{
int q=1,col=1;
(*T).mu=(*M).nu;
(*T).nu=(*M).mu;
(*T).tu=(*M).tu;
for(col=1;col<=(*M).nu;col++)
{
for(q=1;q<=(*M).tu;q++)
if((*M).data[q].j==col)
{
(*T).data[q].i=(*M).data[q].j;
(*T).data[q].j=(*M).data[q].i;
(*T).data[q].e=(*M).data[q].e; }
}
}
Source.h
#include"header.h"
void main()
{
TSMatrix M,T;
CreateSMatrix(&M); PrintSMatrix(&M); TransposeSMatrix(&M,&T); printf("\n\n");
PrintSMatrix(&T);
四、实验结果与数据处理
五、分析与讨论
以前学过另一种将矩阵转置的方法,现在学习的这种方法更方便,遇到复杂、阶数比较大的有规律的矩阵,存储更省内存。

这种方法更具有一般性,能学到这种通用的方法大大减轻了计算量,感觉很好。

六、教师评语成绩
签名:
日期:。

相关主题