数据结构之数组数组实例详解

  

<强>数据结构之数组数组实例详解

  

<强>数组数组

  

<>强基本操作
  

        状态InitArray (int dimm…)//若维数的和随后的各维长度合法,则构造相应的数组,并返回好了   地位DestroyArray()//销毁数组   状态定位(va_list美联社,int,关闭)//若美联社指示的各下标值合法,则求出该元素在一个中相对地址   状态值(ElemType和e,…)//一个是n维数组,e为元素变量,随后是n个下标值。若各下表不越界,则e赋值为所指定的一个的元素值,并返回好了。   状态分配(ElemType e,…)//一个是n维数组,e为元素变量,随后是n各下表值。/若各下标不越界,则将e的值付给所指定的一个的元素,并返回好。      

几个小程序(代码正误检验)
  

     ////通过coolxxx//# include<比特/stdc + + .h>   # include   # include   # include   # include   # include   # include   # include   # include   # include   # include   # include   # include   # include   # include//# include   # include   #定义最小值(a, b) (() & lt; (b) & # 63;(一):(b))   #定义马克斯(a, b) ((a)在(b) & # 63;(一):(b))   #定义abs (a) ((a)在0 & # 63;(一):(- (a)))   #定义lowbit (a)(第一部;(——))   #定义sqr (a) (() * ())   #定义交换(a, b) ((a) ^=(b), (b) ^=(a), (a) ^=(b))   #定义mem (a, b) memset (a, b, sizeof (a))   #定义eps(1平台以及)   #定义J 10000   #定义国防部1000000007   #定义0 x7f7f7f7f马克斯   #定义3.14159265358979323π   # pragma评论(链接器/栈:1024000000、1024000000)   #定义N 8   const int好=1;   const int错误=0;   const int不可行的=1;   typedef int状态;   使用名称空间性病;   typedef很久噢;   双答;   会感染;   int中科院、社科院;   将n, m,大典时,答;      typedef int ElemType;   # include//标准头文件,提供宏va_start, va_arg, va_end用于存取变长参数表   const int MAX_ARRAY_DIM=8;//假设数组维数的最大值为8   类型定义结构体   {   ElemType *基地;//数组元素基址,由InitArray分配   int暗淡;//数组维数   int *界限;//数组维界基址,由InitArray分配   int *常量;//数组映像函数常量基址,由InitArray分配   int elemtotal;   状态InitArray (int dimm…)//若维数的和随后的各维长度合法,则构造相应的数组,并返回好了   {   int我;   va_list美联社;   如果(dimm<1 | | dimm> MAX_ARRAY_DIM)返回错误;   昏暗的=dimm;   边界=(int *) malloc(暗* sizeof (int));   如果(边界)退出(溢出);//若各维长度合法,则存入A.bounds,并求出一个的元素总数elemtotal   elemtotal=1;   va_start(美联社、暗);//美联社为va_list类型,是存放变长参量数表信息的数组   (i=0; i<模糊;我+ +)   {   边界[我]=va_arg(美联社,int);   如果(边界[我]& lt; 0)返回下溢;   elemtotal *=边界[我];   }   va_end(美联社);   基?(ElemType *) malloc (elemtotal * sizeof (ElemType));   如果(!)退出(溢出);   常量=(int *) malloc(暗* sizeof (int));//求映像函数的常数,并存入A.constants(张),i=1,…,暗淡   如果(常量)退出(溢出);   常数[dim-1]=1;//L=1,指针的增减以元素的大小为单位   (i=dim-2; i>=0;我——)   常数[我]=边界(i + 1) *常量(i + 1);   还好;   }//InitArray      地位DestroyArray()//销毁数组   {   如果(!)返回错误;   免费(基地);基?零;   如果(边界)返回错误;   免费(边界);边界=零;   如果(常量)返回错误;   免费(常量);常量=零;   还好;   }//DestroyArray      状态定位(va_list美联社,int,关闭)//若美联社指示的各下标值合法,则求出该元素在一个中相对地址   {   int i,印第安纳州;=0;   (i=0; i<模糊;我+ +)   {   印第安纳州=va_arg(美联社,int);   如果(ind<0 | | ind>=边界[我])返回溢出;   +=常数[我]*印第安纳州;   }   还好;   }//定位      状态值(ElemType和e,…)//一个是n维数组,e为元素变量,随后是n个下标值。//若各下表不越界,则e赋值为所指定的一个的元素值,并返回好了。   {   va_list美联社;   int结果;   va_start(美联社,e);   如果((结果=定位(美联社))& lt;=0)返回结果;   e=*(基础+);   还好;   }//值      状态分配(ElemType e,…)//一个是n维数组,e为元素变量,随后是n各下表值。//若各下标不越界,则将e的值付给所指定的一个的元素,并返回好了。   {   va_list美联社;   int结果;   va_start(美联社,e);   如果((结果=定位(美联社))& lt;=0)返回结果;   *(基础+)=e;   还好;   }//分配      }数组;   空白ArrayCheck()//代码正误检验   {   int i, j, k;   数组;   ElemType e;   A.InitArray (3 2 3 2);   printf("维度:% d \ n总元素个数:% d \ n各维维界:“,A.dim, A.elemtotal);   (i=0; i< A.dim;我+ +)   printf (" % d”, A.bounds[我]);   把(" ");   (i=0; i< A.bounds[0];我+ +)   (j=0; j< A.bounds [1]; j + +)   (k=0; k< A.bounds [2]; k + +)   A.Assign(我* 100 + j * 10 + k + 111, i, j, k);   (i=0; i< A.bounds[0];我+ +,把(" "))   (j=0; j< A.bounds [1]; j + +,把(" "))   (k=0; k< A.bounds [2]; k + +)   printf (" % d”(A.Value (e, i, j, k), e));   A.DestroyArray ();   把(" ");   }   

数据结构之数组数组实例详解