c语言如何初始化倒三角数组

沈万三gz 2015-09-17 09:45:30
我想实现的目标:
0 1 2 3 4
1 2 3 4
2 3 4
3 4
4
如上图,假设我要将15个数据存储到如上的数组中,哪吗我如何定义这个数组?
使用ARRARY[5][5]会有一半的空间被浪费。

ps:我是要用位图存储大量数据,位图的的结构最终会是如上图一样的,我想用一个大数组实现位图的分配,但是这种倒三角的数组我不知道怎嘛实现?
...全文
217 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-09-17
  • 打赏
  • 举报
回复
//直接用函数模拟数组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;
}
沈万三gz 2015-09-17
  • 打赏
  • 举报
回复
感谢楼上两位,我开始一直想着使用静态数组一次分配空间,后来又想用数据结构,还是指针学的不透彻。。。。。。。
苏叔叔 2015-09-17
  • 打赏
  • 举报
回复
这样可好:

/*
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;
}
二班的码农 2015-09-17
  • 打赏
  • 举报
回复
二级指针 int **ppData = new int* [n]; for(int i = 0; i < n; i++) { ppData[i] = new int [n - i]; } 记得用完释放
苏叔叔 2015-09-17
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
//直接用函数模拟数组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;
}
好方法!

#include <stdio.h>
int main(void)
{
	int i, j;
	for(i = 0; i < 5; i++)
	{
		for(j = 0; j < 5; j++)
			printf("%4d", arr(i, j));
		printf("\n");
	}
	return 0;
}
int arr(int x, int y)
{
	if(x + y >= 5)
		return -1;
	return x + y;
}
// 0   1   2   3   4
// 1   2   3   4  -1
// 2   3   4  -1  -1
// 3   4  -1  -1  -1
// 4  -1  -1  -1  -1

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧