[工学]数据结构5-数组和字符串课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[工学]数据结构5-数组和字符串课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 数据结构 数组 字符串 课件
- 资源描述:
-
1、数数 据据 结结 构构第5讲DATA STRUCTUREDATA STRUCTURE第4章 数组和字符串数组数组1特殊矩阵特殊矩阵2稀疏矩阵稀疏矩阵3字符串字符串4数组数组1DATA STRUCTURE4.1.1 数组ADT 数组是下标index 和值value 组成的序对的集合。(index,value)一维数组:A=(0,15),(1,24),(2,33),(3,21)012315243321DATA STRUCTURE4.1.1 数组ADTADT Array 数据:数据:下标下标index和元素值和元素值value组成的数据对集合组成的数据对集合,其中任意两其中任意两个数据对的下标个数据
2、对的下标index各不相同。各不相同。运算:运算:Create():建立一个数组。建立一个数组。Retrieve(i):返回下标为返回下标为i的元素值。的元素值。Store(i,x):将下标为将下标为i的数据对的值置为的数据对的值置为x。;DATA STRUCTURE4.1.2 数组的顺序表示 template A=a0,a1,ai,an-1;pA=new T100;/然后赋值然后赋值 T b1=pAi;/获取第获取第i个元素个元素 T b2=*(pA+i);/获取第获取第i个元素个元素DATA STRUCTURE4.1.2 数组的顺序表示v 二维数组的顺序表示二维数组的顺序表示 二维数组am
3、n映射到一维的存储空间时有两种顺序:行优先和列优先。大多数语言如PASCAL、BASIC、C、C+等都是按行优先顺序存储的,FORTRAN是按列优先顺序存储的。1,11,10,11,1,0,1,11,10,11,01,00,0nmmmniiinnaaaaaaaaaaaaAmn=a0,0,a0,1,a0,n-1,ai,0,ai,1,ai,n-1,am-1,0,am-1,1,am-1,n-1;C/C+行优先的存储方法行优先的存储方法DATA STRUCTURE4.1.2 数组的顺序表示loc(aij)=loc(a00)+(i*n+j)*k (0 i m;0 j n)DATA STRUCTURE4.
4、1.2 数组的顺序表示 v C/C+中申请二维数组的方法:中申请二维数组的方法:v int row=3,col=4;/方法方法1:=int Mtrxrowcol=1,2,3,4,5,6,7,8,9,10,11,12;/方法方法2:=int*ppMtrx=new int*row;for(int i=0;i row;i+)ppMtrxi=new intcol;int n=0;for(i=0;i row;i+)for(int j=0;j col;j+)ppMtrxij=+n;for(i=0;i row;i+)delete ppMtrxi;delete ppMtrx;申请指针数组申请指针数组再为指针数
5、组申请空间再为指针数组申请空间为二维数组赋值为二维数组赋值删除二维数组删除二维数组DATA STRUCTURE4.1.2 数组的顺序表示/方法方法3:=#define row 3#define col 4typedef int Mtrxrow;main()int n=0;Mtrx*pMtrx=new Mtrxcol;/用法与二维数组相同用法与二维数组相同for(int i=0;i row;i+)for(int j=0;j col;j+)pMtrxij=+n;delete pMtrx;定义二维数组定义二维数组将数组定义为将数组定义为数据类型数据类型DATA STRUCTURE4.1.2 数组的顺
6、序表示v 多维数组的顺序表示多维数组的顺序表示v 推广到多维数组推广到多维数组am1m2 mn,数组元素,数组元素ai1i2 in的存储地址为的存储地址为:loc(ai1i2 in)=loc(a00)+(i1*m2*m3*mn +i2*m3*m4*mn +in-1*mn +in)*k=)1,(0 *)*()00 a(111njmikimilocjjnnjkknjjDATA STRUCTURE4.1.3 一维数组的C+类 v用用C+的模板类定义的一维数组抽象数据的模板类定义的一维数组抽象数据类型。公有成员函数包括:类型。公有成员函数包括:构造函数 析构函数 重载下标操作符:重载下标操作符用来返回
7、指向第i个元素的引用 重载数组赋值:赋值操作符实现数组的整体赋值。DATA STRUCTURE4.1.3 一维数组的C+类#include template class Array1Dpublic:Array1D(int sz=0);Array1D()delete elements;T&operator(int i)const;Array1D&operator=(const Array1D&r);friend istream&operator(istream&in,Array1D&r);friend ostream&operator(ostream&out,const Array1D&r);p
8、rivate:int size;T*elements;取元素值取元素值整体赋值整体赋值缺少拷贝构造函数!缺少拷贝构造函数!DATA STRUCTURE4.1.3 一维数组的C+类template Array1D:Array1D(int sz)assert(sz=0);/越界检查越界检查size=sz;elements=new Tsz;template T&Array1D:operator(int i)const assert(i=0&isize);/越界检查越界检查 return elementsi;DATA STRUCTURE4.1.3 一维数组的C+类 template Array1D&A
9、rray1D:operator=(const Array1D&r)/数组数组r整体赋值给整体赋值给this if(this!=&r)/防止自我赋值防止自我赋值 size=r.size;delete elements;/释放原空间释放原空间 elements=new Tsize;/重新分配空间重新分配空间 for(int i=0;i和和template istream&operator (istream&in,Array1D&r)cout Intput arrayn;for(int i=0;i r.elementsi;return in;template ostream&operator (os
10、tream&out,const Array1D&r)cout Array=;for(int i=0;ir.size;i+)out r.elementsi;outendl;return out;DATA STRUCTUREv main中测试该类的效果中测试该类的效果#include array1d.hmain()Array1D a(5),b(8);Array1D c;/采用缺省长度采用缺省长度0 cina;couta b;coutb b;coutc c;couta0=a0“;“b5=b5endl;c=b;coutc=b,c c;b=a;coutb=a,b b;4.1.3 一维数组的C+类DATA
11、 STRUCTURE1 C+中有关数组的类class Arraypublic:Array(int size=0,char*ptr=NULL);/default constructorArray(const Array&);/copy constructorArray();/destructorchar*getPtr()const return m_ptr;void SetArray(int size,char*ptr);private:int*m_ptr;/pointer to the /first element of the array.int m_size;DATA STRUCTURE1
12、 C+中有关数组的类Array:Array(int size,char*ptr/*=NULL*/)m_ptr=NULL;SetArray(size,ptr);Array:Array(const Array&ar)SetArray(ar.m_size,ar.m_ptr);Array:Array()if(m_ptr!=NULL)delete m_ptr;void Array:SetArray(int size,char*ptr)/有问题的函数!有问题的函数!m_size=size;m_ptr=ptr;浅拷贝!要改成深拷贝。DATA STRUCTURE1 C+中有关数组的类#include#incl
13、ude main()char str9;strcpy(str,“Software”);/注意:此处不能用注意:此处不能用char*str=”Software”;/因为这样的字符串是只读的。因为这样的字符串是只读的。Array ar1(8,str);Array ar2(ar1);/调用拷贝构造函数,其中调用了调用拷贝构造函数,其中调用了SetArray()str0 =6;/改变数组内容改变数组内容 cout ar1.getPtr()“”;cout ar2.getPtr()endl;输出:6oftware 6oftware浅拷贝的后果。DATA STRUCTURE1 C+中有关数组的类void A
14、rray:SetArray(int size,char*ptr)if(size=0|ptr=NULL)return;if(m_ptr!=NULL)delete m_ptr;/释放原数组释放原数组m_size=size;m_ptr=new charsize;/申请新的空间申请新的空间strncpy(m_ptr,ptr,size);/拷贝拷贝 输出:Software 6oftwareDATA STRUCTURE第4章 数组和字符串数组数组1特殊矩阵特殊矩阵2稀疏矩阵稀疏矩阵3字符串字符串4数组数组1特殊矩阵特殊矩阵2DATA STRUCTURE4.2.1 对称矩阵 在nn的矩阵A中,若aij=aj
展开阅读全文