主题:初始化数组的算法,有些地方不明白
严尉敏主编的《数据结构》第五章 数组和广义表
初始化数组的算法为:
有一些地方不明白,请指教:
// 数组的顺序存储表示
#include<stdarg.h> // 标准头文件,提供宏va_start,va_arg和va_end,
// 用于存取变长参数表
[color=FF0000] //ca_start,va_arg和ca_end都是用作干什么的[/color]#define MAX_ARRAY_DIM 8 // 假设数组维数的最大值为8
struct Array
{
ElemType *base; // 数组元素基址,由InitArray分配
int dim; // 数组维数
int *bounds; // 数组维界基址,由InitArray分配
int *constants; // 数组映象函数常量基址,由InitArray分配 [color=FF0000]//此变量的作用是什么?[/color]};
Status InitArray(Array &A,int dim,...)
{ // 若维数dim和各维长度合法,则构造相应的数组A,并返回OK
int elemtotal=1,i; // elemtotal是数组元素总数,初值为1(累乘器)
va_list ap;[color=FF0000]//va_list是什么类型[/color]
if(dim<1||dim>MAX_ARRAY_DIM)
return ERROR;
A.dim=dim;
A.bounds=(int *)malloc(dim*sizeof(int));
if(!A.bounds)
exit(OVERFLOW);
va_start(ap,dim);//ap为va_list类型,是存放变长参数表信息的数组
[color=FF0000]//???这注释什么意思啊[/color]
for(i=0;i<dim;++i)
{
A.bounds[i]=va_arg(ap,int);
if(A.bounds[i]<0)
return UNDERFLOW;
elemtotal*=A.bounds[i];
}
va_end(ap);
A.base=(ElemType *)malloc(elemtotal*sizeof(ElemType));
if(!A.base)
exit(OVERFLOW);
[color=FF0000]//下面的就都并明白是什么意思,做什么用了[/color]
//求映像函数的常数Ci,并存入A.constants[i-1],i=1,...,dim
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[i]=A.bounds[i+1]*A.constants[i+1];
return OK;
}
初始化数组的算法为:
有一些地方不明白,请指教:
// 数组的顺序存储表示
#include<stdarg.h> // 标准头文件,提供宏va_start,va_arg和va_end,
// 用于存取变长参数表
[color=FF0000] //ca_start,va_arg和ca_end都是用作干什么的[/color]#define MAX_ARRAY_DIM 8 // 假设数组维数的最大值为8
struct Array
{
ElemType *base; // 数组元素基址,由InitArray分配
int dim; // 数组维数
int *bounds; // 数组维界基址,由InitArray分配
int *constants; // 数组映象函数常量基址,由InitArray分配 [color=FF0000]//此变量的作用是什么?[/color]};
Status InitArray(Array &A,int dim,...)
{ // 若维数dim和各维长度合法,则构造相应的数组A,并返回OK
int elemtotal=1,i; // elemtotal是数组元素总数,初值为1(累乘器)
va_list ap;[color=FF0000]//va_list是什么类型[/color]
if(dim<1||dim>MAX_ARRAY_DIM)
return ERROR;
A.dim=dim;
A.bounds=(int *)malloc(dim*sizeof(int));
if(!A.bounds)
exit(OVERFLOW);
va_start(ap,dim);//ap为va_list类型,是存放变长参数表信息的数组
[color=FF0000]//???这注释什么意思啊[/color]
for(i=0;i<dim;++i)
{
A.bounds[i]=va_arg(ap,int);
if(A.bounds[i]<0)
return UNDERFLOW;
elemtotal*=A.bounds[i];
}
va_end(ap);
A.base=(ElemType *)malloc(elemtotal*sizeof(ElemType));
if(!A.base)
exit(OVERFLOW);
[color=FF0000]//下面的就都并明白是什么意思,做什么用了[/color]
//求映像函数的常数Ci,并存入A.constants[i-1],i=1,...,dim
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[i]=A.bounds[i+1]*A.constants[i+1];
return OK;
}