赞
踩
(1)数组的特点是每个数据元素可以又是一个线性表结构
(2)因此,数组结构可以简单定义为:若线性表中的数据元素(不可再分的原子结构),则称为一维数组,即为向量。
(3)若一维数组中的数据元素又是一个一维数组结构,则称为二维数组。
(4)依此类推,若二维数组中的元素又是一个一维数组结构,则称作三维数组。
(5)数组与线性表的区别与联系:
相同之处:它们都是若干个相同数据类型的数据元素a0,a1,a2.......an-1构成的有限序列。
不同之处:
·数组要求其元素占用一块地址连续的内存单元空间,而线性表无此要求。
·线性表的元素是逻辑意义上不可再分的元素,而数组中的每一个元素还可以是一个数组。
·数组的操作主要是向某个下标的数组元素中存放数据和取某个下标的数组元素,这与线性表的插入与删除操作不同。
(6)
·一维数组:当n=1时,n维数组就退化成定长的线性表。
eg.int num[12]
·二维数组:二维数组可看成以定长线性表为元素的特殊定长线性表。
eg:
- //定义一个M行N列的二维数组类Array2
- typedef Elemtype Array2[M][N];
- //等价于
- typedef Elemtype Array1[N];
- typedef Elemtype Array2[M];
(线性表结构是数组结构的一个特例,而数据结构又是线性表结构的扩展)
1、二维数组结构的基本操作:
(1)给定一组下标,修改该位置元素的内容
Assign(A,item,index1,index2)
(2)给定一组下标,返回该位置的元素内容
Value(A,item,index1,index2)
(3)数组结构在创建时就确定了组成该结构的行向量数目和列向量数目。因此,在数据结构中不存在插入、删除元素的操作。
(4)从理论上讲,数组结构也可以使用两种存储结构,即顺序存储结构和链式存储结构。然而数组结构没有插入、删除元素的操作,所以使用顺序存储结构更为合适,换一句话说,一般的数组结构不使用链式存储结构。
(5)组成数组结构的元素可以是多维的,但存储数据结构元素的内存单元地址是一维的,因此,在存储数组结构之前,需要解决将多维关系映射到一维关系的问题。
(6)数组的实现机制:
·一维数组(n个元素)中任意一个元素ai的内存单元地址:LOC(ai)=LOC(a0)+i*k(0<=i<n)
·一个m行n列的二维数组:LOC(ai,j)=LCO(a00)+(n*i+j)*k (0<=i<m,0<=j<n)
1、特殊矩阵及其压缩存储
(1)对称矩阵
- int Value(int A[],ElemType *item,int i,int j){
- //A为压缩后数组,i、j是压缩前数组下标
- if(i<1||i>MAX_ROW_INDEX ||
- j<1 || j>MAX_COL_INDEX)
- return FALSE;
- else {
- if(i>=j) k=i*(i+1)/2+j; //下三角区域
- else k=j*(j+1)/2+i-1;
- *item=A[k];
- return TRUE;
- }}
(2)上/下三角矩阵
- int value(int A[],Elemtype *item,int i,int j){
- if(i<1 || i>MAX_ROW_INDEX || j<1 || j>MAX_COL_INDEX)
- RETURN FALSE;
- else{if(i>=j) k=i*(i+1)/2+j;
- else k=n*(n-1)/2;
- *item=A[K];
- RETURN TRUE;
- }}
(3)对角矩阵
- int value(int A[],Elemtype *item,int i,int j)
- {
- if(i<1||i>MAX_ROW_INDEX||j<1||j>MAX_COL_INDEX)
- return FALSE;
- else{if(j>=(i-1)&&j<=(i+1))
- k=3*i+j-i+1;
- else k=0;
- *item=A[k];
- return TRUE;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。