c语言向自定数组_数据结构之用C语言实现定义数组
#include
#include
#include
#define MAX_ARRAY_DIM 8
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
typedef int ElemType;
typedef struct{
int dim;??????? //存儲數組的維數
ElemType* base; //存儲數組的基址 由 InitArray 分配
int* constants;??? //contant連續的
int* bounds;??? //存儲數組維界地址 由 InitArray 分配
}array;
下面的部分用來初始化數組
Status InitArray(array* a, int dim,… )
{
va_list ap;
int elemtotal = 1 , i = 0;
if(1 > dim || MAX_ARRAY_DIM < 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 <= 0) return ERROR;
elemtotal *= a->bounds[i]; //計算元素的總的個數
}
a->base = (ElemType *)malloc(elemtotal * sizeof(ElemType)); //分配數組的空間,為a指定基址
//為constants分配空間
a->constants = (int *)malloc(dim * sizeof(int));
if(!a->constants) exit(OVERFLOW);
/*下面的部分是整個程序中最難理解的部分,其中的constants[X]相當于第X維的單位長度,當X=1時即數組的第1維中每個單位包含的元素數,同理第2。。。一直到第n-1維,第n-1維的每個單位長度為1.*/
a->constants[dim-1] = 1;
for(i = dim -2 ; i >= 0 ; i–){
a->constants[i] = a->bounds[i+1] * a->constants[i+1];
//??????? printf(“%d? “,a->constants[i]);
}
for(i = 0 ; i < dim ; i++)
//??????? printf(“\n%d “,a->constants[i]);
return OK;
}
//取得指定下標的偏移量
Status Locate(array* a,va_list ap,int* off)
{
int i=0,ind;
*off = 0;
for(i = 0 ; i < a->dim ; i++){
ind = va_arg(ap,int);
if(ind < 0 || ind >= a->bounds[i])return ERROR;
/*這里通過上面我們計算的那個單位長度與每維序數相乘的積累加起來即為偏移量*/
*off += a->constants[i]*ind;
}
}
//取得數組的值
ElemType Value(array* a,…)
{
va_list ap;
int off = 0;
va_start(ap,a);
if(!Locate(a,ap,&off))return ERROR;
return *(a->base+off);
}
//設置數組的值
Status set(array* a,ElemType b,…)
{
va_list ap;
int off = 0;
va_start(ap,b);
if(!Locate(a,ap,&off))return ERROR;
*(a->base+off) = b ;
return OK;
}
//釋放這個數組
Status DestoryArray(array* a){
if(!a->base)return ERROR;
free(a->base);
if(!a->bounds)return ERROR;
free(a->bounds);
if(!a->constants) return ERROR;
free(a->constants);
return OK;
}
Post Views:
1,617
總結
以上是生活随笔為你收集整理的c语言向自定数组_数据结构之用C语言实现定义数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 轿车为什么叫轿车?
- 下一篇: chrome插件infinity_5款超