【データ構造】配列の順序表示


参考資料:「データ構造(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;
}