打印

匠人老大,求助,关于一个数据结构的问题?

[复制链接]
2807|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
土憋ㄘ`|  楼主 | 2010-11-3 08:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在自学数据结构,没有老师指点,身边也无可问之人,这有在这里发帖提问了,望大虾指点、、#define MaxArraySize 2typedef struct{    DataType *base;  /*数组元素的基地址*/    int dim;    /*数组的维数*/int *bounds;  /*数组的每一维之间的界限的地址*/int *constants;  /*数组存储映像常量基地址*/}Array;int InitArray(Array *A,int dim,...)/*数组的初始化操作*/{    int elemtotal=1,i;      /*elemtotal是数组元素总数,初值为1*/    va_list ap;    if(dim<1||dim>MaxArraySize)   /*如果维数不合法,返回0*/        return 0;    A->dim=dim;    A->bounds=(int *)malloc(dim*sizeof(int));  /*分配一个dim大小的内存单元*/    if(!A->bounds)        exit(-1);    va_start(ap,dim);      /*dim是一个固定参数,即可变参数的前一个参数*/    for(i=0;i<dim;++i)    {        A->bounds[i]=va_arg(ap,int);   /*依次取得可变参数,即各维的长度*/        if(A->bounds[i]<0)            return -1; // 在math.h中定义为4        elemtotal*=A->bounds[i];    /*得到数组中元素总的个数*/    }    va_end(ap);    A->base=(DataType *)malloc(elemtotal*sizeof(DataType)); /*为数组分配所有元素分配内存空间*/    if(!A->base)        exit(-1);    A->constants=(int *)malloc(dim*sizeof(int));  /*为数组的常量基址分配内存单元*/    if(!A->constants)        exit(-1);    A->constants[dim-1]=1;    for(i=dim-2;i>=0;--i)        A->constants[i]=A->bounds[i+1]*A->constants[i+1];    return 1;}int LocateArray(Array A,va_list ap,int *offset) /*根据数组中元素的下标,求出该元素在A中的相对地址offset*/{     int i,instand;    *offset=0;    for(i=0;i<A.dim;i++)    {        instand=va_arg(ap,int);        if(instand<0||instand>=A.bounds[i])            return 0;        *offset+=A.constants[i]*instand;    }    return 1;} 帮我看一下这段代码:数组中的这个参数A->constants是什么意思?有什么用?数组的定位操作时,是怎么利用A->constants这个参数得出数组元素的偏移地址offset的???望大虾解答、谢谢

相关帖子

沙发
土憋ㄘ`|  楼主 | 2010-11-3 08:19 | 只看该作者
我晕、、格式全乱了、、

使用特权

评论回复
板凳
土憋ㄘ`|  楼主 | 2010-11-3 08:22 | 只看该作者

使用特权

评论回复
地板
土憋ㄘ`|  楼主 | 2010-11-3 08:23 | 只看该作者
[

使用特权

评论回复
5
土憋ㄘ`|  楼主 | 2010-11-3 08:23 | 只看该作者
帮我看一下这段代码:
数组中的这个参数A->constants是什么意思?有什么用?
数组的定位操作时,是怎么利用A->constants这个参数得出数组元素的偏移地址offset的???
望大虾解答、谢谢!

使用特权

评论回复
6
ayb_ice| | 2010-11-3 08:31 | 只看该作者
A是指向结构体的指针
显然A->constants指向结构体的成员
...

使用特权

评论回复
7
土憋ㄘ`|  楼主 | 2010-11-3 08:42 | 只看该作者
具体点呢?
比如:
实参传入的是 A,3,2,5,7
dim=3;
bounds[]={2,5,7}
然后、
constants里的内容是什么?数组元素定位函数是怎么实现的、

使用特权

评论回复
8
土憋ㄘ`|  楼主 | 2010-11-3 09:23 | 只看该作者
我擦呀、、我瞎了我的狗眼、、有句代码看错了、我说怎么看都看不懂?
MB滴、、仔细呀、、
又白白浪费这么多生命、、

使用特权

评论回复
9
focuson| | 2010-11-3 14:21 | 只看该作者
晕,发帖的时候不是有个 ‘代码’ (就是<>)嘛。。放在里面就不会乱。

使用特权

评论回复
10
zhiyonghe| | 2010-11-3 14:52 | 只看该作者
#define MaxArraySize 2
typedef struct
{   
    DataType *base;   /*数组元素的基地址*/   
    int dim;          /*数组的维数*/
    int *bounds;      /*数组的每一维之间的界限的地址*/
    int *constants;   /*数组存储映像常量基地址*/
}Array;
int InitArray(Array *A,int dim,...)    /*数组的初始化操作*/
{   
    int elemtotal = 1,i;                /*elemtotal是数组元素总数,初值为1*/   
    va_list ap;   
    if(dim<1||dim>MaxArraySize)         /*如果维数不合法,返回0*/      
    return 0;   
    A->dim = dim;   
    A->bounds = (int *)malloc(dim*sizeof(int));  /*分配一个dim大小的内存单元*/   
    if(!A->bounds)      
    exit(-1);   
    va_start(ap,dim);                    /*dim是一个固定参数,即可变参数的前一个参数*/   
    for(i=0;i<dim;++i)   
    {      
        A->bounds[i] = va_arg(ap,int);   /*依次取得可变参数,即各维的长度*/      
        if(A->bounds[i]<0)           
        return -1;                       // 在math.h中定义为4      
        elemtotal *= A->bounds[i];       /*得到数组中元素总的个数*/   
    }   
    va_end(ap);  
    A->base = (DataType *)malloc(elemtotal*sizeof(DataType)); /*为数组分配所有元素分配内存空间*/   
    if(!A->base)      
    exit(-1);   
    A->constants = (int *)malloc(dim*sizeof(int));           /*为数组的常量基址分配内存单元*/  
    if(!A->constants)     
    exit(-1);   
    A->constants[dim-1] = 1;  
    for(i=dim-2;i>=0;--i)     
    A->constants[i] = A->bounds[i+1]*A->constants[i+1];
    return 1;
}

int LocateArray(Array A,va_list ap,int *offset)     /*根据数组中元素的下标,求出该元素在A中的相对地址offset*/
{   
    int i,instand;   
    *offset=0;   
    for(i=0;i<A.dim;i++)  
    {      
        instand=va_arg(ap,int);     
        if(instand<0||instand> = A.bounds[i])      
        return 0;      
        *offset += A.constants[i]*instand;   
    }  
    return 1;
}

使用特权

评论回复
11
zhiyonghe| | 2010-11-3 14:58 | 只看该作者
#define MaxArraySize 2
typedef struct
{   
    DataType *base;     /*数组元素的基地址*/   
    int dim;                    /*数组的维数*/
    int *bounds;           /*数组的每一维之间的界限的地址*/
    int *constants;       /*数组存储映像常量基地址*/
}Array;
int InitArray(Array *A,int dim,...)       /*数组的初始化操作*/
{   
    int elemtotal = 1,i;                        /*elemtotal是数组元素总数,初值为1*/   
    va_list ap;   
    if(dim<1||dim>MaxArraySize)        /*如果维数不合法,返回0*/      
    return 0;   
    A->dim = dim;   
    A->bounds = (int *)malloc(dim*sizeof(int));  /*分配一个dim大小的内存单元*/   
    if(!A->bounds)      
    exit(-1);   
    va_start(ap,dim);                    /*dim是一个固定参数,即可变参数的前一个参数*/   
    for(i=0;i<dim;++i)   
    {      
        A->bounds[i] = va_arg(ap,int);   /*依次取得可变参数,即各维的长度*/      
        if(A->bounds[i]<0)           
        return -1;                                   // 在math.h中定义为4      
        elemtotal *= A->bounds[i];       /*得到数组中元素总的个数*/   
    }   
    va_end(ap);  
    A->base = (DataType *)malloc(elemtotal*sizeof(DataType)); /*为数组分配所有元素分配内存空间*/   
    if(!A->base)      
    exit(-1);   
    A->constants = (int *)malloc(dim*sizeof(int));                   /*为数组的常量基址分配内存单元*/  
    if(!A->constants)     
    exit(-1);   
    A->constants[dim-1] = 1;  
    for(i=dim-2;i>=0;--i)     
    A->constants[i] = A->bounds[i+1]*A->constants[i+1];
    return 1;
}

int LocateArray(Array A,va_list ap,int *offset)     /*根据数组中元素的下标,求出该元素在A中的相对地址offset*/
{   
    int i,instand;   
    *offset=0;   
    for(i=0;i<A.dim;i++)  
    {      
        instand=va_arg(ap,int);     
        if(instand<0||instand> = A.bounds[i])      
        return 0;      
        *offset += A.constants[i]*instand;   
    }  
    return 1;
}

使用特权

评论回复
12
jack_shine| | 2010-11-3 15:24 | 只看该作者
路过学习~~~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:君子坦荡,小人常戚

0

主题

187

帖子

1

粉丝