日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言向自定数组_数据结构之用C语言实现定义数组

發布時間:2024/9/27 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言实现定义数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。