三维数组的顺序存储与实现.doc
文本预览下载声明
三位数组的顺序存储与实现
#includestdio.h
#includestdlib.h
#define ERROR 0
#define OK 1
typedef int Status;
typedef int datatype;
typedef struct
{
datatype *base;
int index[3];
int c[3];
}array;
Status InitArray(array *A,int b1,int b2,int b3)
{
int elements;
if(b1=0||b2=0||b3=0)return ERROR;
A-index[0]=b1;
A-index[1]=b2;
A-index[2]=b3;
elements=b1*b2*b3;
A-base=(datatype*)malloc(elements*sizeof(datatype));
if(!(A-base))return(0);
A-c[0]=b2*b3;
A-c[1]=b3;
A-c[2]=1; //error: A-c[0]=1;
return OK;
}
Status value(array A,int i1,int i2,int i3,datatype x)
{
int off;
if(i10||i1=A.index[0]||i20||i1=A.index[1]||i30||i1=A.index[2])
return ERROR;
off=i1*A.c[0]+i2*A.c[1]+i3*A.c[2];
x=*(A.base+off);
return OK;
}
Status assign (array A,datatype e, int i1,int i2,int i3)
{
int off;
if(i10||i1=A.index[0]||i20||i2=A.index[1]||i30||i3=A.index[2])
return ERROR;
off=i1*A.c[0]+i2*A.c[1]+i3*A.c[2];
*(A.base+off)=e;
return OK;
}
void main()
{
int i,j,k,y=1;
array X;
InitArray(X,3,4,5);
for (i=0;iX.index[0];i++)
{
for (j=0;jX.index[1];j++) //error: for (j=0;j=X.index[0];j++)
for (k=0;kX.index[2];k++) //error: for (k=0;k=X.index[2];k++)
{
assign(X,y++,i,j,k);
}
}
for (i=0;iX.index[0];i++)
{
printf(^^^^^^^[%d]^^^^^^^\n,i+1);
for(j=0;jX.index[1];j++)
{
for(k=0;kX.index[2];k++) //error: for(k=0;k=X.index[2];k++)
{
value (X,i,j,k,y);
printf(%4d,y); //erase: printf(%2d,y);
}
printf(\n);
}
}
}
显示全部