数组的顺序表示和实现【严蔚敏】
来源:互联网 发布:免费网络电视在线直播 编辑:程序博客网 时间:2024/05/17 00:00
代码为数据结构【严蔚敏】书籍配套纯c代码
//数组的顺序存储表示 #include<stdarg.h> // 标准头文件,提供宏va_start,va_arg和va_end, // 用于存取变长参数表 struct Array { ElemType *base; // 数组元素基址,由InitArray分配 int dim; // 数组维数 int *bounds; // 数组维界基址,由InitArray分配 int *constants; // 数组映象函数常量基址,由InitArray分配 };
Status InitArray(Array &A,int dim,...){ // 若维数dim和各维长度合法,则构造相应的数组A,并返回OK(图5-2) int elemtotal=1,i; // elemtotal是元素总值 va_list ap; 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); for(i=0;i<dim;++i) { A.bounds[i]=va_arg(ap,int); if(A.bounds[i]<0) return UNDERFLOW; // 在math.h中定义为4 elemtotal*=A.bounds[i]; } 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[i]=A.bounds[i+1]*A.constants[i+1]; return OK;}
Status DestroyArray(Array &A){ // 销毁数组A(图5-3) if(A.base) { free(A.base); A.base=NULL; } else return ERROR; if(A.bounds) { free(A.bounds); A.bounds=NULL; } else return ERROR; if(A.constants) { free(A.constants); A.constants=NULL; } else return ERROR; return OK;}
Status Locate(Array A,va_list ap,int &off) // Value()、Assign()调用此函数{ // 若ap指示的各下标值合法,则求出该元素在A中的相对地址off int i,ind; off=0; for(i=0;i<A.dim;i++) { ind=va_arg(ap,int); if(ind<0||ind>=A.bounds[i]) return OVERFLOW; off+=A.constants[i]*ind; } return OK;}
Status Value(ElemType &e,Array A,...) // 在VC++中,...之前的形参不能是引用类型{ // ...依次为各维的下标值,若各下标合法,则e被赋值为A的相应的元素值 va_list ap; Status result; int off; va_start(ap,A); if((result=Locate(A,ap,off))==OVERFLOW) // 调用Locate() return result; e=*(A.base+off); return OK;}
Status Assign(Array &A,ElemType e,...){ // ...依次为各维的下标值,若各下标合法,则将e的值赋给A的指定的元素 va_list ap; Status result; int off; va_start(ap,e); if((result=Locate(A,ap,off))==OVERFLOW) // 调用Locate() return result; *(A.base+off)=e; return OK;}//stdarg.h描述详解http://blog.csdn.net/holandstone/article/details/6947119
0 0
- 数组的顺序表示和实现【严蔚敏】
- 数组的顺序结构表示和实现
- 数组的顺序表示和实现
- 数组的顺序表示和实现
- 数组的顺序表示和实现
- 数组的顺序表示和实现
- 数组的顺序表示和实现
- 数组的顺序存储表示和实现
- 数组的顺序表示和实现
- 数组的顺序存储表示和实现-数据结构
- 数组的顺序表示和C语言实现
- 第五章(1)数组的顺序表示和实现
- (严蔚敏版)数组的顺序存储表示和实现代码
- 数组顺序存储表示和实现
- 数组的顺序表示与实现
- 数组的顺序表示与实现
- 【Data】数组的顺序表示与实现
- 数组的顺序表示与实现
- 【IMWeb训练营团队作业】
- 润乾(报表展现)获取及处理(集算器)麦杰数据库数据
- Android开发-基础网络组件(1)使用HttpURLConnection登陆-AndroidStudio
- sublimelinter phpfmt php代码语法错误提示 代码缩进整理 插件自动删除没有引用的代码片段,解决办法
- c#反射
- 数组的顺序表示和实现【严蔚敏】
- 1.Java线程基础-Android线程相关
- error C4772: #import referenced a type from a missing type library; '__missing_type__' used as a pla
- Yann LeCun:掌舵Facebook人工智能 | 完美人物志
- 24c02存储多个数据
- 51nod 2级算法题-1014
- QT_mingw+opencv3.0+摄像头视频显示工程代码与库
- 一个EasyUI前端框架的实际案例(干货,可下载源码哦)
- word中尾注分隔符删除后还有一个回车符怎么删