第九周项目3-稀疏矩阵的三元组表示的实现(1)

Copyright (c) 2015,烟台大学计算机学院
All rights reserved,

文件名称:idea.cpp

作者:王阳

完成日期:2015年11月日

#include "stdio.h"
#define M 6
#define N 7
#define MaxSize  100         //矩阵中非零元素最多个数
typedef int ElemType;
typedef struct
{
    int r;                  //行号
    int c;                  //列号
    ElemType d;             //元素值
} TupNode;                  //三元组定义

typedef struct
{
    int rows;               //行数
    int cols;               //列数
    int nums;               //非零元素个数
    TupNode data[MaxSize];
} TSMatrix;                 //三元组顺序表定义
void CreatMat(TSMatrix &t,ElemType A[M][N]);  //从一个二维稀疏矩阵创建其三元组表示
bool Value(TSMatrix &t,ElemType x,int i,int j);  //三元组元素赋值
bool Assign(TSMatrix t,ElemType &x,int i,int j); //将指定位置的元素值赋给变量
void DispMat(TSMatrix t);//输出三元组
void TranTat(TSMatrix t,TSMatrix &tb);//矩阵转置

#include"tup.h"
//TSMatrix储存行的个数、列的个数、及非0的个数、tupnode数组(包含每个元素的row,col和实际值)

void CreatMat(TSMatrix &t,ElemType A[M][N])//从一个二维稀疏矩阵创建其三元组表示
{
	int i=0,j=0;
	t.cols=N;
	t.rows=M;
	t.nums=0;
	while(it.rows||j>t.cols)
	{
		return false;
	}

	int k=0,k1;
	while(kt.data[k].r)
	{
		k++;
	}
	while(kt.data[k].c)
	{
		k++;
	}
	 if (t.data[k].r==i && t.data[k].c==j)   //存在这样的元素
        t.data[k].d=x;
	else
	{
		k1=t.nums-1;
		while(k<=k1)
		{
		    t.data[k1+1].r=t.data[k1].r;
            t.data[k1+1].c=t.data[k1].c;
            t.data[k1+1].d=t.data[k1].d;
			k1--;
		}
		t.data[k].r=i;
        t.data[k].c=j;
        t.data[k].d=x;
        t.nums++;
		return true;
	}
}
//三元组元素赋值
bool Assign(TSMatrix t,ElemType &x,int i,int j)
{
	if(i>t.rows||j>t.cols)
	{
		return false;
	}

	int k=0;
	while(kt.data[k].r&&j>t.data[k].c)
	{
		if(t.data[k].r==i&&t.data[k].c==j)
		{
			
			break;
		}
		k++;

	}
	if(t.data[k].r==i&&t.data[k].c==j)
	{
		x=t.data[k].d;
	}
	else x=0;
	return true;

} //将指定位置的元素值赋给变量
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

#include"tup.h"
int main()
{
    TSMatrix t,tb;
    int x,y=10;
    int A[6][7]=
    {
        {0,0,1,0,0,0,0},
        {0,2,0,0,0,0,0},
        {3,0,0,0,0,0,0},
        {0,0,0,5,0,0,0},
        {0,0,0,0,6,0,0},
        {0,0,0,0,0,7,4}
    };
    CreatMat(t,A);
    printf("b:\n");
    DispMat(t);
    if (Assign(t,x,2,5)==true)  //调用时返回true
        printf("Assign(t,x,2,5)=>x=%d\n",x);
    else  //调用时返回false
        printf("Assign(t,x,2,5)=>参数错误\n");
    Value(t,y,2,5);
    printf("执行Value(t,10,2,5)\n");
    if (Assign(t,x,2,5)==true)  //调用时返回true
        printf("Assign(t,x,2,5)=>x=%d\n",x);
    else  //调用时返回false
        printf("Assign(t,x,2,5)=>参数错误\n");
    printf("b:\n");
    DispMat(t);
    TranTat(t,tb);
    printf("矩阵转置tb:\n");
    DispMat(tb);
    return 0;
}

第九周项目3-稀疏矩阵的三元组表示的实现(1)_第1张图片

你可能感兴趣的:(第九周项目3-稀疏矩阵的三元组表示的实现(1))