数据结构——数组

                                      数据结构——数组

  (一)数组

 1.1 数组的存储和寻址

       1.一个一维数组就是若干元素的一个有限序列,而其每个元素都通过下标来指定,且元素本身就是一种数据结构。

       2.一维数组唯一的限制就是所有的元素都具有相同的类型,并占据相同大小的存储空间。

       3.高维数组:按行优先顺序和按列优先顺序。

         (1)按行优先顺序

                 二维数组A[m][n]中任意元素A[i][j]的存储地址: Loc(A[i][j])=Loc(A[0][0])+(i*n+j)*C

                 三维数组A[m][n][p]中数组元素a[i][j][k]地址计算公式为: Loc(a[i][j][k])=Loc(a[0][0]     [0])+i*n*p*C+j*p*C+k*C

                 n维数组a[i1][i2]…[in]的存储地址:



    1.2 自定义数组类:

     在自定义的数组类中,不但需要重载一些必要的运算符,还需要对下标符号“[ ]”进行重载,以确保可提供越界索引保护。


     一维数组Array的定义:

template <class T>
   class Array
  { private:
	   int FSize;             // 数组的大小
	   T*  alist;              // 指向数组的第一个元素的指针
	   void Allocate( );  // 为数组分配空间
public:  
    Array( int sz=50 );
    Array( const Array <T>& x );   //复制构造函数        ~Array( void )  { delete[ ] alist;}
    Array<T>& operator=(const Array<T>& x);
    T& operator[ ](int i);
     Array<T> Operator T*(void)const
          {return alist;}
     int ListSize(void) const
         { return Fsize;}
     void  Resize(int NewSize);
};

      Array的实现: 

Template<class T> // 为数组分配空间
Void Array<T>∷Allocate( )
{
	alist = new T[Fsize];
	if( alist==0 )
     cerr<<“Memory Allocation Fail.”<<endl;
 }
 
Template<class T> // 构造函数
Array<T>∷Array(int sz=50)    
   {
	if(sz<=0)
           {
                 cerr<<“Invalid Array Size.”<<endl;
                 return;
           }
	Fsize=sz;
	Allocate( );
    }
    
template <class T>//复制构造函数
Array<T>∷Array(const Array<T>& x )
{
	Fsize=x.Fsize;
	Allocate( );
          for(int i=0; i< Fsize; i++)
	    alist[i] = x.alist[i];
}	

template<class T> // [ ]的重载
T& Array<T>∷operator[ ](int i)
 {
	if( i<0 || i>=Fsize )
	 {
                 cerr<<“invalid  index.”<<;
                 endl;
                 exit(1);
             }
	return alist[i];
}

template <class T> // 修改数组的大小
 void Array<T>∷ReSize(int newSize)
{
		if (newSize <= 0)
		{ cerr<<“invalid Array Size.”<<endl;
		  return;}
		 if(newSize != Fsize)
		 { newArray = new T[newSize];
		   if(newArray==0)
		   { cerr<<“Memory Allocation Fail.”  <<endl;   
                 return;}
int n=(newSize <= Fsize?newSsize:Fsize);
    for(int i=0;i<n;i++)
	  newArray[i]=alist[i];	
	   delete[ ]alist;
	   alist=newArray;
	   FSize=newSize;
	 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值