四川大学数据结构与算法设计第5讲数组和广义表.pptx

四川大学数据结构与算法设计第5讲数组和广义表.pptx

四川大学数据结构与算法设计第5讲数组和广义表

Section 1Array 数组的抽象数据类型定义ADT Array { D={ aj1,j2, ...,,ji, jn|ji=0,...,bi-1, i=1,2,..,n } (n称数组的维数,bi是数组第i维的长度,ji是数组元素的第i维下标) R={R1, R2, ..., Rn} Ri={aj1,... ji,... jn ,aj1, ...ji+1, ...jn |0? jk?bk-1, 1?k?n且k?i, 0?ji?bi-2,i=2,...,n } } ADT Array 基本操作二维数组的定义数据对象: D = {aij | 0≤i≤b1-1, 0 ≤j≤b2-1}数据关系: R = { ROW, COL } COL = {ai,j,ai+1,j| 0≤i≤b1-2, 0≤j≤b2-1} ROW = {ai,j,ai,j+1| 0≤i≤b1-1, 0≤ j≤b2-2}基 本 操 作InitArray(A, n, bound1, ..., boundn)DestroyArray(A)Value(A, x, index1, ..., indexn)Assign(A, x, index1, ..., indexn)InitArray(A, n, bound1, ..., boundn) 操作结果:若维数 n 和各维长度 合法,则构造相应的 数组A,并返回OK。 DestroyArray(A) 操作结果:销毁数组A。 Value(A, x, index1, ..., indexn) 初始条件: A是n维数组,x为元素变 量,随后是n 个下标值。 操作结果:若各下标不超界,则x赋值 为所指定的A 的元素值,并 返回OK。 Assign(A, x, index1, ..., indexn) 初始条件: A是n维数组,x为 元素变量,随后是n 个下标值。 操作结果:若下标不超界,则 将 x的值赋给所指 定的A的元素,并 返回 OK。一维数组定义 相同类型的数据元素的集合。一维数组的示例与顺序表的不同在于数组可以按元素的下标直接存储和访问数组元素。0 1 2 3 4 5 6 7 8 935 27 49 18 60 54 77 83 41 02一维数组(Array)类的定义template class Typeclass Array { Type *elements;//数组存放空间 int ArraySize;//当前长度 void getArray ( );//建立数组空间 public: Array( int Size=DefaultSize ); Array( const ArrayType x ); ~Array( ) { delete [ ]elements;} ArrayType operator= //数组赋值 ( const ArrayType A ); Type operator[ ]( int i ); //取元素值 int Length()const { return ArraySize; }//取数组长度 void ReSize ( int sz );//扩充数组 }一维数组公共操作的实现template class Typevoid ArrayType :: getArray ( ) { //私有函数:创建数组存储空间 elements = new Type[ArraySize];}template class TypeArrayType :: Array ( int sz ) { ArraySize = sz; getArray ( ); }template class Type ArrayType::Array(ArrayType x){ int n = ArraySize = x.ArraySize; elements = new Type[n]; Type *srcptr = x.elements; Type *destptr = elements; while ( n-- ) * destptr++ = * srcptr++; }template class Type ArrayType::Array(ArrayType x){ int Size = x.ArraySize; elements = new Type[Size]; for(int i=0;iSize;i++) elements[i]=x.elements[i]; }template class TypeType ArrayType::operator[ ](int i){ i

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档