输入矩阵语法(可优化,无想法)
函数
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;
}
稀疏矩阵的压缩
#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);
}
}