您的位置:首页 > 其它

数组的顺序存储表示

2010-05-11 08:10 316 查看
参考书籍:<数据结构c语言版> 作者:严蔚敏 p93~94

#include "stdio.h"
#include "stdarg.h"
#define MAX_ARRAY_DIM 8
typedef int ElemType;
typedef int Status;
typedef struct
{
ElemType *base;
int dim;
int *bounds;
int *constants;
}Array;
Status InitArray(Array *A,int dim,...)
{
int elemtotal=1,i;
va_list ap;
if(dim <1 || dim>MAX_ARRAY_DIM ) return 0;
A->dim=dim;
A->bounds=(int *)malloc(dim*sizeof(int));
va_start(ap,dim);
for(i=0;i<dim;++i){
A->bounds[i]=va_arg(ap,int);
elemtotal*=A->bounds[i];
}//for
va_end(ap);
A->base=(ElemType *)malloc(elemtotal*sizeof(ElemType));
A->constants=(int *)malloc(dim*sizeof(int));
A->constants[dim-1]=1;
for(i=dim-2;i>=0;--i)
A->constants[i]=A->bounds[i+1]*A->constants[i+1];
return 1;
}
Status Locate(Array *A,va_list ap,int *off)
{
int i,ind=0;
*off=0;
for(i=0;i<A->dim;++i)
{
ind=va_arg(ap,int);
printf("%d/n",ind);
if(ind<0 || ind>=A->bounds[i]) return 0;
(*off)+=A->constants[i]*ind;
}
va_end(ap);
return 1;

}

Status Assign(Array *A,ElemType e,...)
{
va_list ap;
int off=0,result;
va_start(ap,e);
result=Locate(A,ap,&off);

printf("%d/n",result);
if(result<=0) return result;
*(A->base+off)=e;
return 1;
}

void main()
{
Array A;
int dim=4;
int i;
InitArray(&A,3,1,2,3);
Assign(&A,10,1,1,1);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: