資料結構例程——對稱矩陣的壓縮儲存及基本運算
阿新 • • 發佈:2018-11-16
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
本文針對資料結構基礎系列網路課程(5):陣列與廣義表中第2課時特殊矩陣的壓縮儲存。
問題:用壓縮形式儲存對稱矩陣,實現下面的操作並測試
void Init(int *&b);//為N階對稱矩陣初始化儲存資料的一維陣列bint Value(int b[], int i, int j);//返回儲存在b[M]中,對應二維陣列A[i][j]的值void Assign(int b[], int e, int i, int j);//將e賦值給對應二維陣列元素A[i][j],要儲存到b[M]中void Disp(int b[]);//輸出壓縮儲存在b中的對稱矩陣void Destroy(int b[]); //銷燬儲存空間
- 1
- 2
- 3
- 4
- 5
解答:
#include <stdio.h> #include <malloc.h>#define N 4//為N階對稱矩陣初始化儲存資料的一維陣列Bvoid 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);}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;}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67