【データ構造】配列の順序表示
参考資料:「データ構造(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;
}