c语言怎么初始化倒三角数组
c语言如何初始化倒三角数组
我想实现的目标:
0 1 2 3 4
1 2 3 4
2 3 4
3 4
4
如上图,假设我要将15个数据存储到如上的数组中,哪吗我如何定义这个数组?
使用ARRARY[5][5]会有一半的空间被浪费。
ps:我是要用位图存储大量数据,位图的的结构最终会是如上图一样的,我想用一个大数组实现位图的分配,但是这种倒三角的数组我不知道怎嘛实现?
------解决思路----------------------
二级指针
int **ppData = new int* [n];
for(int i = 0; i < n; i++)
{
ppData[i] = new int [n - i];
}
记得用完释放
------解决思路----------------------
这样可好:
------解决思路----------------------
我想实现的目标:
0 1 2 3 4
1 2 3 4
2 3 4
3 4
4
如上图,假设我要将15个数据存储到如上的数组中,哪吗我如何定义这个数组?
使用ARRARY[5][5]会有一半的空间被浪费。
ps:我是要用位图存储大量数据,位图的的结构最终会是如上图一样的,我想用一个大数组实现位图的分配,但是这种倒三角的数组我不知道怎嘛实现?
------解决思路----------------------
二级指针
int **ppData = new int* [n];
for(int i = 0; i < n; i++)
{
ppData[i] = new int [n - i];
}
记得用完释放
------解决思路----------------------
这样可好:
/*
0 1 2 3 4
1 2 3 4
2 3 4
3 4
4
*/
int main(void)
{
int i, j;
int n[5] = {5, 4, 3, 2, 1};
int **pArray = (int**)malloc(sizeof(int*)*5);
//赋值
for(i = 0; i < 5; i++)
{
pArray[i] = (int*)malloc(sizeof(int)*n[i]);
for(j = 0; j < n[i]; j++)
pArray[i][j] = i + j;
}
//打印
for(i = 0; i < 5; i++)
{
for(j = 0; j < n[i]; j++)
printf("%d ", pArray[i][j]);
printf("\n");
}
//释放空间
for(i = 0; i < 5; i++)
free(pArray[i]);
free(pArray);
return 0;
}
------解决思路----------------------
//直接用函数模拟数组arr
int arr(int x,int y,int n) {//返回nxn倒三角数组arr[x][y]处的值,x=0..n-1,y=0..n-1
if (x+y>=n) return -1;//右下角无数据返回-1
return x+y;
}