對稱矩陣壓縮存儲的實現與應用(1)

問題及代碼:



問題描述:用壓縮形式存儲對稱矩陣,實現下面的操作並測試 
        void Init(int *&b);//爲N階對稱矩陣初始化存儲數據的一維數組B 
        int Value(int b[], int i, int j);//返回存儲在b[M]中,對應
        二維數組A[i][j]的值應二維數組元素A[i][j],要存儲到B[M]中 
        void Disp(int b[]);//輸出壓縮存儲在b中的對稱矩陣 
        void Destroy(int b[]);//銷燬存儲空間 
輸入描述:下三角數據。 
程序輸出:矩陣的全體輸出。 

#include <stdio.h>  
#include <malloc.h>  
#define N 4  
  
//爲N階對稱矩陣初始化存儲數據的一維數組B  
void Init(int *&b);  
//返回存儲在b[M]中,對應二維數組A[i][j]的值  
//int Value(int b[], int i, int j);  
//將e賦值給對應二維數組元素A[i][j],要存儲到B[M]中  
void Assign(int b[], int e, int i, int j);  
//輸出壓縮存儲在b中的對稱矩陣  
void Disp(int b[]);  
//銷燬存儲空間  
void Destroy(int b[]);  
  
int main()  
{  
    int *b1;  //指向整型的指針,待初始化  
    int i, j;  
    int v;  
    Init(b1);  
    printf("請輸入對稱矩陣(只需要輸入下三角部分即可)\n");  
    for(i=0; i<N; i++)  
    {  
        printf("輸入第%d行的%d個數據元素: ", i+1, i+1);  
        for(j=0; j<=i; j++)  
        {  
            scanf("%d", &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);  
  
}  
void Assign(int b[], int e, int i, int j)  
{  
    int k;  
    if(i>j)  
    {  
        k=i*(i+1)/2+j;  
        b[k]=e;  
  
    }  
    else if(i<=j)  
    {  
        k=j*(j+1)/2+i;  
        b[k]=e;  
    }  
  
  
}  
void Disp(int b[])  
{  
    int i=0;  
    int j=0;  
    while(i<N)  
    {  
        while(j<N)  
        {  
            printf("%4d",b[i*(i+1)/2+j]);  
            j++;  
        }  
        printf("\n");  
        j=0;  
        i++;  
    }  
}  
void Destroy(int b[])  
{  
  
    free(b);  
}  

運行結果:

這裏寫圖片描述


知識點總結:

對稱矩陣的操作。


學習心得:

矩陣的操作是之前沒有接觸過的,感覺很陌生,通過借鑑老師的代碼來達到學習的作用,我認爲效果是非常好的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章