數(shù)據(jù)結構教程第二十二課實驗五數(shù)組實驗

字號:

教學目的: 掌握二維數(shù)組的實現(xiàn)方法
    教學重點: 二維數(shù)組的存儲表示,二維數(shù)組的基本操作
    教學難點: 二維數(shù)組的基本操作
    授課內容:
    數(shù)組的順序存儲表示和實現(xiàn):
    #include
    #define MAX_ARRAY_DIM 8
    typedef struct {
    ElemType *base;
    int dim;
    int *bounds;
    int *constants;
    }Array;
    Status InitArray(Array &A,int dim,...);
    Status DestroyArray(Array &A);
    Status Value(Array A,ElemType &e,...);
    Status Assign(Array &A,ElemType e,...);
    基本操作的算法描述:
    Status InitArray(Array &A,int dim,...){
    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=1;i    A.bounds[i]=va_arg(ap,int);
    if(A.bounds[i]<0) return UNDERFLOW;
    elemtotal*=A.bounds[i];
    }
    va_end(ap);
    A.base=(ElemType *)malloc(elemtotal*sizeof(ElemType));
    if(!A.base) exit(OVERFLOW);
    A.constants=(int *)malloc(dim*sizeof(int));
    if(!A.constants) exit(OVERFLOW);
    A.constants[dim-1]=1;
    for(i=dim-2;i>=0;--i)
    A.constants[i]=A.bounds[i+1]*A.constants[i+1];
    return OK;
    }
    Status DestoyArray(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.constatns) return ERROR;
    free(A.constants); A.constants=NULL;
    return OK;
    }
    Status Locate(Array A,va_list ap,int &off){
    off=0;
    for(i=0;i
    ind=va_arg(ap,int);
    if(ind<0||ind>=A.bounds[i]) return OVERFLOW;
    off+=A.constants[i]*ind;
    }
    return OK;
    }
    Status Value(Array A,ElemType &e,...){
    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,...){
    va_start(ap,e);
    if((result=Locate(A,ap,off))<=0) return result;
    *(A.base+off)=e;
    return OK;
    }