zoukankan      html  css  js  c++  java
  • 一步一步学数据结构之(动态申请二维数组)

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

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

    当然,动态申请二维数组和动态申请二级指针内存是一个道理,其实从动态申请二级指针也可以试着延伸到动态申请三级指针,甚至到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;
    }

  • 相关阅读:
    IntelliJ IDEA自动补全变量名称和属性名称的快捷键
    Redis客户端 Spring Data Redis(未完)
    用画小狗的方法来解释Java中的值传递
    Java -- Arrays.asList()方法
    有趣的IntegerCache
    字符串使用点滴
    字符串拼接+和concat的区别
    在一个Excel单元格内输入多行内容
    JSTL1.2学习总结
    Android ico
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3265442.html
Copyright © 2011-2022 走看看