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;??????? //存儲(chǔ)數(shù)組的維數(shù)
ElemType* base; //存儲(chǔ)數(shù)組的基址 由 InitArray 分配
int* constants;??? //contant連續(xù)的
int* bounds;??? //存儲(chǔ)數(shù)組維界地址 由 InitArray 分配
}array;
下面的部分用來(lái)初始化數(shù)組
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]; //計(jì)算元素的總的個(gè)數(shù)
}
a->base = (ElemType *)malloc(elemtotal * sizeof(ElemType)); //分配數(shù)組的空間,為a指定基址
//為constants分配空間
a->constants = (int *)malloc(dim * sizeof(int));
if(!a->constants) exit(OVERFLOW);
/*下面的部分是整個(gè)程序中最難理解的部分,其中的constants[X]相當(dāng)于第X維的單位長(zhǎng)度,當(dāng)X=1時(shí)即數(shù)組的第1維中每個(gè)單位包含的元素?cái)?shù),同理第2。。。一直到第n-1維,第n-1維的每個(gè)單位長(zhǎng)度為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;
}
//取得指定下標(biāo)的偏移量
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;
/*這里通過(guò)上面我們計(jì)算的那個(gè)單位長(zhǎng)度與每維序數(shù)相乘的積累加起來(lái)即為偏移量*/
*off += a->constants[i]*ind;
}
}
//取得數(shù)組的值
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);
}
//設(shè)置數(shù)組的值
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;
}
//釋放這個(gè)數(shù)組
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
總結(jié)
以上是生活随笔為你收集整理的c语言向自定数组_数据结构之用C语言实现定义数组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 轿车为什么叫轿车?
- 下一篇: chrome插件infinity_5款超