数组的顺序存储表示
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);
}
#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);
}
相关文章推荐
- 线性表的顺序存储(一)--数组表示
- 数组顺序存储表示和实现
- 队列的顺序存储表示---数组实现
- (严蔚敏版)数组的顺序存储表示和实现代码
- 数据结构之---C语言实现数组的顺序存储表示(可运行)
- 顺序表是线性表基于数组的存储表示
- 数组的顺序存储表示
- 第五章 数组的数组的顺序存储表示和实现
- 数组的顺序存储表示和实现
- 数据结构--数组和广义表--数组的顺序存储表示和实现
- 数组的顺序存储表示和实现-数据结构
- 数据结构中数组的顺序存储
- 将一个数组中的数据按相反的顺序存储(将数组中的数据逆序输出)
- 数组的顺序表示和实现
- javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例
- 数组的顺序表示和实现
- 数组实现线性表的顺序存储
- 线性表顺序存储(数组)及其15种操作的实现
- 数据结构--串--定长顺序存储表示
- 图的存储结构(1):数组表示法