数组的顺序存储表示

//以下构造了大小为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;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值