資料結構 稀疏矩陣的轉置 C/C++
阿新 • • 發佈:2018-11-11
思路:
三元結構體陣列將分別儲存 行, 列,值
將行列交換
對交換後的行進行排序
typedef struct Node { int row; // 行 int col; // 列 int data; }Node; void initList(Node *, int); int inputList(Node *, int[][3],int,int); void printList(Node *, int); void transpositionList(Node *, int, int[][5]); void transpositionList(Node * list,int); void sort(Node * , int); void printArray(int r,int c,int [][5]); void intiArray(int r, int c, int[][5]); void printArray(int r,int c,int [][5]); int main(void) { int arr[5][3] = { {0,0,1}, {2,0,0}, {0,3,0}, {4,0,0}, {5,0,0}}; Node list[5 * 3]; initList(list, 15); int len = inputList(list, arr,5,3); printList(list, len); transpositionList(list,len); printList(list,len); int transpositionArray[3][5]; intiArray(3,5,transpositionArray); transpositionList(list,len, transpositionArray); printArray(3,5,transpositionArray); return 0; } void initList(Node * list, int n) { int i; for (i = 0; i < n; i++) { list[i].col = 0; list[i].row = 0; list[i].data = 0; } } int inputList(Node * list, int a[][3],int row,int col) { int count = 0; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (a[i][j] != 0) { list[count].row = i; list[count].col = j; list[count++].data = a[i][j]; } } } return count; } void printList(Node * list, int n) { for (int i = 0; i < n; i++) { cout << list[i].row << " " << list[i].col << " " << list[i].data << endl; } cout << endl; } void transpositionList(Node * list, int n, int a[][5]) { for (int i = 0; i < n; i++) { a[list[i].row][list[i].col] = list[i].data; } cout << endl; } void transpositionList(Node * list,int len) { for (int i = 0; i < len; i++) { int tmp = list[i].row; list[i].row = list[i].col; list[i].col = tmp; } printList(list, len); sort(list, len); } void sort(Node * list, int len) { for (int i = 1; i < len; i++) { for (int j = 0; j < len - i; j++) { if (list[j].row > list[j + 1].row) { Node tmp = list[j]; list[j] = list[j + 1]; list[j + 1] = tmp; } } } } void intiArray(int r, int c, int a[][5]) { for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { a[i][j] = 0; } } } void printArray(int r, int c, int a[][5]) { for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { cout << a[i][j] << " "; } cout << endl; } cout << endl; }