您的位置:首页 > 理论基础 > 数据结构算法

一步一步学数据结构之(动态申请二维数组)

2013-08-17 13:08 155 查看
在实现图操作的时候,因为用邻接矩阵法实现,所以就用到二维数组,而在这里,就着重说下怎么样动态申请二维数组,它的原理是:





申请完毕后,就类似于在一个一维数组中,每一个元素都为一个指针,而这个指针正好指向一个一维数组(或者说就是这个一维数组的首地址):





当然,动态申请二维数组和动态申请二级指针内存是一个道理,其实从动态申请二级指针也可以试着延伸到动态申请三级指针,甚至到n级指针。

现在截取下邻接矩阵法实现图时,创建矩阵的代码,以供参考:

MGraph* MGraph_Create(MVertex** v, int n)
{
TMGraph* ret = NULL;

if((NULL!=v) && (0<n))
{
ret = (TMGraph*)malloc(sizeof(TMGraph));

if(NULL != ret)
{
int* p = NULL;

ret->count = n;
//通过二级指针动态申请一维指针数组
ret->v = (MVertex**)malloc(sizeof(MVertex*) * n);
ret->matrix = (int**)malloc(sizeof(int*) * n);

//通过一级指针申请数据空间
//calloc函数把申请的数据空间全清0
p = (int*)calloc(n * n, sizeof(int));

if((NULL!=ret->v) && (NULL!=ret->matrix) && (NULL!=p))
{
int i = 0;

for(i=0; i<n; i++)
{//把指针数组和数据空间连接起来
ret->v[i] = v[i];
ret->matrix[i] = p + i* n;
}
}
else
{
free(ret->v);
free(ret->matrix);
free(p);
free(ret);

ret = NULL;
}
}
}

return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息