数组的顺序存储表示

来源:互联网 发布:淘宝宝贝怎么上架视频 编辑:程序博客网 时间:2024/05/16 18:15

//以下构造了大小为3*3*3的3维数组




#include<iostream>

#include<cstdarg>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int elemtype;
using namespace std;
typedef struct{
int dim;
int*bounds;
elemtype *base;
int*constants;
}Array;
int InitArray(Array&L,int dim,...){ //创建Array
L.dim=dim;
int elemtotal=1;
L.bounds=(int *)malloc(dim*sizeof(int));
va_list ap;
va_start(ap,dim);
for(int i=0;i<dim;i++){
L.bounds[i]=va_arg(ap,int);
elemtotal*=L.bounds[i];
}
L.base=(elemtype*)malloc(elemtotal*sizeof(elemtype));
L.constants=(int *)malloc(dim*sizeof(int));L.constants[dim-1]=1;
for(i=dim-2;i>=0;i--){
L.constants[i]=L.constants[i+1]*L.bounds[i+1];
}va_end(ap);return OK;
}
int Locate(Array L,va_list ap,int &off){off=0;//定位
for(int i=0;i<L.dim;i++){int lop=va_arg(ap,int);
off+=lop*L.constants[i];
}
return OK;}
int Value(Array L,elemtype &e,int n,...)//获取元素
{
va_list ap;int off;va_start(ap,n);Locate(L,ap,off);
e=*(L.base+off);va_end(ap);
return OK;}
int Assign(Array &L,elemtype e,int n,...)//输入元素
{va_list ap;int off;va_start(ap,n);Locate(L,ap,off);
*(L.base+off)=e;va_end(ap);
return OK;}
int main(){
Array L;int e=0;
InitArray(L,3,3,3,3);
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
for(int u=0;u<3;u++)
{ Assign(L,e,3,i,j,u);e++;}
   cout<<"输出:" <<endl;
for( i=0;i<3;i++)
for(int j=0;j<3;j++){
for(int u=0;u<3;u++)
{ Value(L,e,3,i,j,u);cout<<i<<j<<u<<":"<<e<<endl;}
cout<<endl;
}
return OK;}
2 0