第九周-项目2 - 对称矩阵压缩存储的实现与应用

来源:互联网 发布:天涯明月刀情缘 知乎 编辑:程序博客网 时间:2024/05/18 01:52
</pre><pre name="code" class="cpp">/*Copyright (c) 2015,烟台大学计算机学院*All right reserved*文件名称:博客.cpp*作者:贾召飞*完成日期:2015年10月30日*版本号:v1.0**问题描述: 数据结构例程——对称矩阵的压缩存储及基本运算*/#include<iostream>using namespace std;#include<stdio.h>#include<malloc.h>#define N 4void Init(int *&b);int Value(int b[], int i, int j);void Assign(int b[], int e, int i, int j);void Disp(int b[]);void Destroy(int b[]);int main(){int *b1;int v;int i, j;Init(b1);cout << "请输入对称矩阵" << endl;for (i = 0; i < N; i++){cout << "请输入"<< i+1 << "行" << "的" << i+1 << "个数据"<< endl;for (j = 0; j <= i; j++){cin >> v;Assign(b1, v, i, j);}}Disp(b1);Destroy(b1);return 0;}void Init(int *&b){    b = (int*)malloc(sizeof(int)*(N*(N+1)/2));}//返回存储在b[M]中,对应二维数组A[i][j]的值int Value(int b[], int i, int j){    if (i>=j)        return b[(i*(i+1))/2+j];    else        return b[(j*(j+1))/2+i];}//将e赋值给对应二维数组元素A[i][j],要存储到B[M]中void Assign(int b[], int e, int i, int j){    if (i>=j)        b[(i*(i+1))/2+j] = e;    else        b[(j*(j+1))/2+i] = e;    return;}//输出压缩存储在b中的对称矩阵void Disp(int b[]){    int i,j;    for (i=0; i<N; i++)    {        for (j=0; j<N; j++)            printf("%4d",Value(b,i,j));        printf("\n");    }}//销毁存储空间void Destroy(int b[]){    free(b);}


运行结果如下图所示


0 0