一步一步学数据结构之(动态申请二维数组)
2013-08-17 13:08
155 查看
在实现图操作的时候,因为用邻接矩阵法实现,所以就用到二维数组,而在这里,就着重说下怎么样动态申请二维数组,它的原理是:
申请完毕后,就类似于在一个一维数组中,每一个元素都为一个指针,而这个指针正好指向一个一维数组(或者说就是这个一维数组的首地址):
当然,动态申请二维数组和动态申请二级指针内存是一个道理,其实从动态申请二级指针也可以试着延伸到动态申请三级指针,甚至到n级指针。
现在截取下邻接矩阵法实现图时,创建矩阵的代码,以供参考:
申请完毕后,就类似于在一个一维数组中,每一个元素都为一个指针,而这个指针正好指向一个一维数组(或者说就是这个一维数组的首地址):
当然,动态申请二维数组和动态申请二级指针内存是一个道理,其实从动态申请二级指针也可以试着延伸到动态申请三级指针,甚至到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; }
相关文章推荐
- 一步一步学数据结构之(动态申请二维数组)
- 数据结构动态申请二维数组
- 动态申请二维数组(一)
- 动态申请二维数组及参数传递
- 动态申请二维数组
- 动态申请二维数组
- C++ 动态申请列数行数不确定的变长二维数组(主要是行数不确定)
- C\C++动态申请内存用于存放二维数组
- C++中动态申请二维数组并释放方法
- C++中动态申请二维数组并释放方法
- 动态申请二维数组并释放方法
- 动态申请二维数组方法
- 申请动态二维数组
- 动态申请二维数组
- 动态申请二维数组
- 动态申请 二维数组 以及初始化、 赋值
- C++矩阵类中的运算符重载和二维数组动态申请内存
- C++中动态申请二维数组并释放方法
- C++中动态申请二维数组
- C语言中二维数组的动态申请与释放