数组的顺序表示和实现

本文介绍了一种用C语言实现的顺序存储数组结构,包括数组的初始化、销毁、元素定位、读取和赋值等基本操作。通过`InitArray`函数创建数组并分配内存,`DestroyArray`函数释放内存,`Locate`函数计算元素的相对地址,`Value`和`Assign`函数分别用于读取和设置数组元素的值。
摘要由CSDN通过智能技术生成
// c5-1.h 数组的顺序存储结构。
#define MAX_ARRAY_DIM 8 // 假设数组维数的最大值为8
struct Array
{ ElemType *base; // 数组元素基址,由InitArray分配
  int dim; // 数组维数
  int *bounds; // 数组维界基址,由InitArray分配
  int *constants; // 数组映象函数常量基址,由InitArray分配
};
?
// bo5-1.cpp 顺序存储数组(存储结构由c5-1.h定义)的基本操作(5个)
Status InitArray(Array &A,int dim,...)
{ // 若维数dim和各维长度合法,则构造相应的数组A,并返回OK。在教科书第93页
  int elemtotal=1,i; // elemtotal是数组元素总数,初值为1(累乘器)
  va_list ap; // 变长参数表类型,在stdarg.h中
  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); // 变长参数“...”从形参dim之后开始
  for(i=0;i<dim;++i)
  { A.bounds[i]=va_arg(ap,int); // 逐一将变长参数赋给A.bounds[i]
    if(A.bounds[i]<0)
      return UNDERFLOW; // 在math.h中定义为4
    elemtotal*=A.bounds[i]; // 数组元素总数=各维长度之乘积
  }    
  va_end(ap); // 结束提取
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值