- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0123
15 24 33 21
§4.1.1 数组ADT
DATA STRUCTURE
数组ADT
ADT Array { 数据:
下标index和元素值value组成的数据对集合,其中任意两 个数据对的下标index各不相同。 运算: Create(): 建立一个数组。 Retrieve(i): 返回下标为i的元素值。 Store(i,x): 将下标为i的数据对的值置为x。 };
for(int j = 0; j < col; j++)
pMtrx[i][j] = ++n;
delete[] pMtrx; }
§4.1.2 数组的序表示 推广到多维数组a[m1][m2] …[mn],数组元素a[i1][i2] …[in]
的存储地址为 :
j 1
k j1
(0 i j mj , 1 j n)
§4.1.3 一维数组的C++类
DATA STRUCTURE
用C++的模板类定义的一维数组抽象数据 类型。公有成员函数包括:
构造函数 析构函数 重载下标操作符:[] 重载下标操作符用来返回指向第i个元素的引用 重载数组赋值:= 赋值操作符实现数组的整体赋值。
a0,0
a1,0
ai,0
a0,1 a0,n1
a1,1 a1,n1
ai,1 ai,n1
};
am1,0 am1,1 am1,n1
C/C++行优先的存储方法
§4.1.2 数组的顺序表示
DATA STRUCTURE
§4.1.3 一维数组的C++类
DATA STRUCTURE
#include <assert.h>
template <class T>
class Array1D
{
public:
Array1D(int sz=0); ~Array1D(){ delete[] elements; } T& operator [](int i)const;
for ( i = 0; i < row; i++) delete[] ppMtrx[i];
delete[] ppMtrx;
申请指针数组 再为指针数组申请空间 为二维数组赋值
删除二维数组
§4.1.2 数组的顺序表示
DATA STRUCTURE
// 方法3:=====================================
loc(a[i1][i2] …[in]) = loc(a[0]…[0]) + ( i1* m2 * m3 *…* mn + i2* m3 * m4 *…* mn + … + in-1* mn + in ) * k
n1
n
= loc(a[0][0]) ( (ij * mk ) in ) * k
二维数组的顺序表示 loc(a[i][j]) = loc(a[0][0])+(i*n+j)*k (0 i < m; 0 j < n)
基地址:loc(a[0][0]) 每个元素占 k 个存储单元。
§4.1.2 数组的顺序表示
DATA STRUCTURE
C/C++中申请二维数组的方法: int row=3, col=4; // 方法1:===================================== int Mtrx[row][col]={ {1,2,3,4},{5,6,7,8},{9,10,11,12} }; // 方法2:=====================================
大多数语言如PASCAL、BASIC、C、C++等都是按行优先顺序存储 的,FORTRAN是按列优先顺序存储的。
A[m][n] = { {a0,0, a0,1, … a0,n-1 },
…,{ ai,0, ai,1,… ai,n-1 }, …,{am-1,0, am-1,1, … am-1,n-1}
int **ppMtrx = new int*[row]; for (int i = 0; i < row; i++)
ppMtrx[i] = new int[col]; int n=0; for( i = 0; i < row; i++)
for(int j = 0; j < col; j++) ppMtrx[i][j] = ++n;
§4.1.2 数组的顺序表示
DATA STRUCTURE
一维数组的顺序表示 loc(a[i]) = loc(a[0])+i*k ( i = 0, 1, 2, …, n-1 )
基地址:loc(a[0]) 每个元素占 k 个存储单元。
template <class T> A[] = { a0, a1, …, ai, …, an-1 };
数 据 结 构 第5讲
DATA STRUCTURE
第4章 数组和字符串
DATA STRUCTURE
1
数数组组
2
特殊矩阵
3
稀疏矩阵
4
字符串
§4.1.1 数组ADT
DATA STRUCTURE
数组的定义
数组是下标index 和值value 组成的序对的集合。
( index, value )
一维数组: A = { (0, 15), (1, 24), (2, 33), (3, 21) }
pA = new T[100]; // 然后赋值 T b1 = pA[i]; // 获取第i个元素 T b2 = *( pA + i ); // 获取第i个元素
§4.1.2 数组的顺序表示
DATA STRUCTURE
二维数组的顺序表示
二维数组a[m][n]映射到一维的存储空间时有两种顺序:行优先和列 优先。
#define row 3 #define col 4 typedef int Mtrx[row];
将数组定义为 数据类型
main()
定义二维数组
{
int n = 0;
Mtrx *pMtrx = new Mtrx[col]; // 用法与二维数组相同
for(int i = 0; i < row; i++)
取元素值 整体赋值
Array1D<T>& operator=(const Array1D<T> &r);