输入矩阵语法(可优化,无想法)

函数

c
int** inputMatrix(int*row, int*col) { int** a = (int**)malloc(sizeof(int*) * 100);//创建行指针 最大100行 if (!a) exit(0); int rowNum = 0; int colNum = 0; char tmp; while (1) { colNum = 0; a[rowNum] = (int*)malloc(sizeof(int) * 100);//创建列指针 最大100列 if (!a[rowNum]) exit(0); while (1) { scanf_s("%d", &a[rowNum][colNum]); colNum++; if ((tmp = getchar()) == '\n') { //检测到第一个回车时退出列的输入 //要加入空格判断 break; } } int* temp = (int*)realloc(a[rowNum], sizeof(int) * colNum); //将列指针指向空间缩小到和列长度一致 rowNum++; if ((tmp = getchar()) == '\n') { break;//第二个回车时退出矩阵输入 } else { ungetc(tmp, stdin);//若getchar获取的不是回车,将获取到的字符返回缓冲区 } } int** b = (int**)realloc(a, sizeof(int*) * rowNum); //将行指针指向空间缩小到和行长度一致 if (!b) exit(0); *row = rowNum; *col = colNum; return a; }

稀疏矩阵的压缩

c
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdarg.h> typedef int item; typedef struct { int x, y; //行下标,列下标 item e; }triple; typedef struct { triple data[1001]; int mu, nu, tu; //行数列数非零元个数 }TSMatrix; void initSMatrix(TSMatrix* p) { p->mu = p->nu = p->tu = 0; } int main(void) { int col, row; int** martrix = inputMatrix(&row, &col); TSMatrix arr; initSMatrix(&arr); arr.mu = row; arr.nu = col; for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (martrix[i][j] != 0) { arr.data[arr.tu].e = martrix[i][j]; arr.data[arr.tu].x = i; arr.data[arr.tu].y = j; arr.tu++; } } } for (int i = 0; i < arr.tu; i++) { printf("%d行第%d列元素为%d", arr.data[i].x, arr.data[i].y, arr.data[i].e); } }