多维数组的实现
来源:互联网 发布:手机倒计时软件下载 编辑:程序博客网 时间:2024/05/29 04:52
#define MAX_ARRAY_DIM 8
#define ElemType int
//数组的定义
typedef struct {
ElemType *base;
int dim;
int *bounds;
int *constants;
} Array;
//初始化数组,dim后面是可变参数部分
int InitArray(Array &A,int dim,...)
{
if(dim<1 || dim>MAX_ARRAY_DIM) return -1;
A.dim=dim;
A.bounds=(int *)malloc(dim*sizeof(int));
if(!A.bounds) return -1;
int elemtotal=1;
va_list ap;
va_start(ap,dim);
for(int i=0;i<dim;i++)
{
A.bounds[i]=va_arg(ap,int);
if(A.bounds[i]<0) return -1;
elemtotal*=A.bounds[i];//计算数组总大小
}
va_end(ap);
A.base=(ElemType *)malloc(elemtotal*sizeof(ElemType));
A.constants=(int *)malloc(dim *sizeof(int));
A.constants[i-1]=1;
for(i=dim-2;i>=0;i--)
A.constants[i]=A.bounds[i+1]*A.constants[i+1];//计算c值
return 1;
}
//定位
int Locate(Array A,va_list ap,int &off)
{
off=0;
for(int i=0;i<A.dim;++i)
{
int ind=va_arg(ap,int);
if(ind <0 || ind>=A.bounds[i]) return -1;
off+=A.constants[i]*ind;
}
return 1;
}
//给数组赋值
int Assign(Array &A,ElemType e,...)
{
va_list ap;
va_start(ap,e);
int off,result;
if((result=Locate(A,ap,off))<=0) return result;
*(A.base+off)=e;
return 1;
}
void main()
{
Array A;
int e;
InitArray(A,3,5,6,7);
Assign(A,100,1,2,3);
Value(A,e,1,2,3)
printf("/nA[1,2,3]=%d",e);
}
- 多维数组的实现
- 多维数组的实现
- 一个动态多维数组的实现
- C++ 地址连续的多维数组实现
- 多维数组的实现 (java 表示)
- Vcotor实现多维数组
- JavaScript实现多维数组
- js实现多维数组
- javascript实现多维数组到一维数组的转换
- 多维数组的问题
- 多维数组的动态分配
- 多维数组的动态分配
- 多维数组的应用
- 多维数组的初始化
- 多维数组的初始化
- 多维数组的表示
- 多维数组的地址
- 多维数组的输出
- A4文档打印为A3双面的解决办法
- Mac (xcode)应用程序图片的修改
- ARM汇编基础知识点总结
- Lotus notes6-85升级安装设置
- 齐次坐标的理解
- 多维数组的实现
- 在word文件中查找字符串
- windows下批量下载android源码
- WCF之Binding详解
- Flex中应注意的些小问题
- poj1094 Sorting It All Out
- js表单验证插件
- tabHost 使用方法
- 实例操作 教你玩转SQL Server存储过程