You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
|
|
|
|
// https://www.bilibili.com/video/BV1iC4y1p77u
|
|
|
|
|
// 要想理解明白,需要画图,按视频的图来理解就简单明白了
|
|
|
|
|
//动态二维数据应用:行列转换
|
|
|
|
|
using namespace std;
|
|
|
|
|
int y[101]; //y[i]:第i个数据所在的列
|
|
|
|
|
int c[101]; //c[j]:第j列的数据个数
|
|
|
|
|
int main() {
|
|
|
|
|
int i, j, M = 5, K = 8;
|
|
|
|
|
int w[8][3] = {{1, 2, 12},
|
|
|
|
|
{1, 4, 14},
|
|
|
|
|
{2, 2, 22},
|
|
|
|
|
{2, 5, 25},
|
|
|
|
|
{3, 4, 34},
|
|
|
|
|
{4, 1, 41},
|
|
|
|
|
{4, 3, 43},
|
|
|
|
|
{4, 5, 45}};
|
|
|
|
|
//读入数据到我们定义的数据结构中,其实就是两个数组模拟一个M*N的大数组,有数据的留用,无数据的不占用资源
|
|
|
|
|
for (i = 1; i <= K; i++) {
|
|
|
|
|
y[i] = w[i - 1][1];//列
|
|
|
|
|
c[y[i]]++;//每列数据个数
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//给指针a申请M+1个int型指针空间
|
|
|
|
|
int **a = new int *[M + 1];//指针数组 a指向指针数组的开头
|
|
|
|
|
|
|
|
|
|
//给第i列指针a[i]申请c[i]个int型空间
|
|
|
|
|
for (i = 1; i <= M; i++)a[i] = new int[c[i]];//放弃a[0],从a[1]开始创建动态数组,数组的大小就是c[i]
|
|
|
|
|
|
|
|
|
|
//收集k个数据到相应的y[i]列中
|
|
|
|
|
for (i = 1; i <= K; i++) {
|
|
|
|
|
*a[y[i]] = w[i - 1][2]; //向指针指向的数组元素进行赋值
|
|
|
|
|
printf("*a[%d]=%d\n", y[i], *a[y[i]]);
|
|
|
|
|
a[y[i]]++;//数组指针下移,
|
|
|
|
|
}
|
|
|
|
|
//列优先输出数据
|
|
|
|
|
for (i = 1; i <= M; i++) {
|
|
|
|
|
a[i] -= c[i];//数组指针回到每列前面
|
|
|
|
|
for (j = 1; j <= c[i]; j++, a[i]++)
|
|
|
|
|
printf("%d ", *a[i]);//输出数据
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|