数组的顺序表示与实现

D={aj1j2...jn|n(>0)称为数组的维数,bi是数组第i维的长度,ji是数组元素的第i维下标,aj1j2...jn (-ElemSet}

Ri={<aj1...ji...jn,aj1...ji+1 ...jn>|
0<=jk<=bk-1,1<=k<=n且k<>i,
0<=ji<=bi-2,aj1...ji...jn,
aj1...ji+1 ...jn(-D,i=2,...n}

InitArray(&A,n,bound1,...,boundn)

DestroyArray(&A)

Value(A,&e,index1,...,indexn)

Assign(&A,e,index1,...,indexn)

a00 a01 a02 ... a0,n-1
a10 a11 a12 ... a1,n-1
... ... ... ... ...
am-1,0 am-1,1 am-1,2 ... am-1,n-1

A0 a00 a01 a02 ... a0,n-1
a10 a11 a12 ... a1,n-1
... ... ... ... ...
am-1,0 am-1,1 am-1,2 ... am-1,n-1
A1
...
Am

a00 a01 a02 ... a0,n-1 a10 a11 a12 ... a1,n-1 ... am-1,0 am-1,1 am-1,2 ... am-1,n-1

#include<stdarg.h>
#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<dim;++i){
A.bounds=va_arg(ap,int);
if(A.bounds<0) return UNDERFLOW;
elemtotal*=A.bounds;
}
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=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<A.dim;++i){
ind=va_arg(ap,int);
if(ind<0||ind>=A.bounds) return OVERFLOW;
off+=A.constants*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;
}

• 本文已收录于以下专栏：

数组的顺序存储表示和实现：利用可变参数列表实现多维数组的创建，元素赋值等操作

• 2014-06-09 09:33
• 168KB
• 下载

C语言数据结构——数组顺序存储结构的实现和表示

#include #include /* malloc()等 */ #include /* EOF(=^Z或F6),NULL */ #include /* atoi() */ #include /* ...

数组的顺序存储表示和实现

#include #include #include using namespace std; //数组的顺序存储表示和实现 const int MAX_ARRAY_DIM=8; #defin...

数组的顺序表示与实现

#include #include #include//使用变长参数表需要引入此头文件 #define MAX_DIM 8 typedef struct { int * base;//数组元素基址...

数组的顺序表示和实现

// c5-1.h 数组的顺序存储表示(见图5.1) #include // 标准头文件，提供宏va_start，va_arg和va_end，用于存取变长参数表 #define MAX_ARRAY_D...

数组的顺序存储表示和实现-数据结构

#include #include /* malloc()等 */ #include /* EOF(=^Z或F6),NULL */ #include /* atoi() */ #include...

数据结构--数组和广义表--数组的顺序存储表示和实现

举报原因： 您举报文章：深度学习：神经网络中的前向传播和反向传播算法推导 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)