【数据结构】数组的顺序表示

参考资料:《数据结构(C语言版)严蔚敏著》
版权说明:未经作者允许,禁止转载。如引用本文内容,需标明作者及出处。如本文侵犯了您的权益,请联系我删除并致歉。
文章说明:如文章中出现错误,请联系我更改。如您对文章的内容有任何疑问,也欢迎来与我讨论。
本文正在施工中...请稍等...


数组的顺序表示

#include //标准头文件,提供宏va_start、va_arg和va_end,用于存取变长参数表
#define MAX_ARRAY_DIM 8 //数组最大维数
typedef struct{
    ElemType *base;
    int dim;
    int *bounds;
    int *constants;
}Array;
Status InitArray(Array &A, int dim, ...){
    //若维数dim和各维长度合法,则构造相应的数组A,并返回OK
    if(dim<1 || dim>MAX_ARRAY_DIM) return ERROR;
    A.dim=dim;
    A.bounds=(int*)malloc(dim*sizeof(int));
    if(!A.bounds) exit(OVERFLOW);
    elemtotal=1;
    va_start(ap, dim);
    for(i=0; i=0; --i)
        A.constants[i]=A.bounds[i+1]*A.constants[i+1];
    return OK;
}
Status DestroyArray(Array &A){
    if(!A.base) return ERROR;
    free(A.base); A.base=NULL;
    if(!A.bounds) return ERROR;
    free(A.bounds); A.bounds=NULL;
    if(!A.constants) return ERROR;
    free(A.constants); A.constants=NULL;
    return OK;
}
Status Locate(Array A, va_list ap, int &off){
    //若ap指示的各下标值合法,则求出该元素在A中相对地址off
    off=0;
    for(i=0; i=A.bounds[i]) return OVERFLOW;
        off+=A.constants[i]*ind;
    }
    return OK;
}
Status Value(Array A, ElemType &e, ...){
    //A是n位数组,e为元素变量,随后是n个下标值,
    //若各下标不超界,则e赋值为所指定的A的元素值,并返回OK。
    va_start(ap, e);
    if((result=Locate(A, ap, off))<=0) return result;
    e=*(A.base+off);
    return OK;
}
Status Assign(Array &A, ElemType e, ...){
    //A是n维数组,e为元素变量,随后是n个下标值。
    //若下标不超界,则将e的值赋给所指定的A的元素,并返回OK。
    va_start(ap, e);
    if((result=Locate(A, ap, off))<=0) return result;
    *(A.base+off)=e;
    return OK;
}

 

你可能感兴趣的:(温故知新,【专题】数据结构)