第2章-数组数据结构课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第2章-数组数据结构课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 数据结构 课件
- 资源描述:
-
1、 第2章 数组1.数组及其抽象数据类型 1)一维数组 2)一维数组的抽象数据类型的类声明n 3)二维数组(矩阵)n 4)特殊矩阵2.顺序表(sequential List)1)顺序表定义和特点 2)顺序表的类定义n 3)顺序表的查找 插入 删除 4)使用顺序表的例子(用抽象数据类型)3.多项式抽象数据类型 1)如何表达多项式:系数,阶数 2)多项式相加 4.稀疏矩阵 5.字符串(String)1)字符串(简称串)的定义以及一些术语 2)串的基本操作 3)串的类定义以及串操作的实现 4)字符串的模式匹配(pattern matching)朴素的匹配算法n 改进的模式匹配算法:KMP第2章 数组数
2、组:具有相同数据类型的数据元素的集合。一般存储于一个连续存储空间中。通过数组元素的下标来存取该元素。1.数组及其抽象数据类型 1)一维数组:具有相同数据类型的n(n=0)个元素的有限序列。例如:0 1 2 3 4 5 6 7 8 9 a:i 02418377546018492735下标i为数组元素到数组开始的偏移量 Loc(ai)=loc(a0)+i*l 2)一维数组的抽象数据类型的类声明 对数组的操作主要有:对数组元素的存与取。3)二维数组(矩阵)由n个行向量和m个列向量所组成的向量 a00 a01 a02 a0,m-1 Anm=a10 a11 a12 a 1,m-1 an-1,0an-1,
3、1an-1,2an-1,m-1a00a01a0m-1a10a11a1m-1对二维数组的顺序存储:1)按行优先顺序存放 a00,a01,a02,a0m-1,a10 如ALGOL,PASCAL,C+,BASIC,Ada等都是按行优先顺序存放的。2)按列优先顺序存放 a00,a10,a20,a n-10 ,a01 如Fortran语言 如果按行优先存放,其下标元素的映射公式为:Loc(i,j)=Loc(0,0)+i*m+j*L 如果按列优先存放,其下标元素的映射公式为:Loc(i,j)=Loc(0,0)+j*n+i*L 同理对三维数组am1m2m3 其下标元素aijk Loc(i,j,k)=Loc(
4、0,0,0)+i*m2*m3+j*m3+k 0120m2-1m1-1 4)特殊矩阵(1)下三角矩阵(对于对称矩阵的压缩存储)a11a21 a22a31 a32 a33an1 an2 ann 按行序存放a11a21a22 Loc(i,j)=Loc(1,1)+(1+2+3+i-1)+j-1*L =Loc(1,1)+(i*(i-1)/2+j-1)*L 上三角矩阵 a11 a12 a1n a11 a22 a2n 按行序存放 a12 a33 a1n a22 .ann .Loc(i,j)=Loc(1,1)+(n+(n-1)+(n-i+2)+j-i*L =loc(1,1)+(n-k+1)+j-i*L K=1
5、i-1(2)三对角线矩阵 a11a12 a21a22a23 a32a33a34 按行序存放 an-1,n-2an-1,n-1an-1,n an,n-1 an,n Loc(i,j)=Loc(1,1)+(i-1)*3-1+(j-i+1)*La11a12a21a22a232.顺序表(sequential List)1)顺序表定义和特点 定义:是一个顺序存储的n(n=0)个表项的序列。n=0叫做空表。每个表项是单个对象,其数据类型 相同。表长度因随插入,删除而改变。线性表(a0,a1,a2,an-1)可以线性存储,也可拉链存储 特点:查找某一表项,必须从表的第一个表项开始查找,直到找到为止。数组可以方
6、便的随机存取,但不可任意插,删元 素。a0a1an-12)顺序表的类定义n顺序表的实现:用数组。datalast 0 1 2 MaxSize-1 有三个量来表示数组:data-存放数组 MaxSize-顺序表的最大项数 last-当前已存项数的下标 这三个向量都是封装在私有域中 顺序表的操作常用的操作是:查找,插入,删除。下面是顺序表的类声明:templateclass SeqList public:SeqList(int MaxSize=defaultSize);SeqList()delete data;int Length()const return last+1;int Find(Typ
7、e&x)const;int IsIn(Type&x);int Insert(Type&x,int i);int Remove(Type&x);int Next(Type&x);int Prior(Type&x);int IsEmpty()return last=-1;int IsFull()return last=MaxSize-1;Type&Get(int i)return ilast?NULL:datai;private:Type*data;int MaxSize;int last;构造函数 templateSeqlist:Seqlist(int sz)if(sz0)Maxsize=sz;
8、last=-1;data=new TypeMaxsize;3)顺序表的查找 插入 删除(1)查找:i从0号位置开始找,找到则返回x在data数组中的位 置,否则返回-1 算法分析:假设表中有n项 ACN=(1+2+n)/n 等概率 =(1+n)*n/2n=(n+1)/2 不成功的比较次数为n次 (2)插入 把x插入到i位置,则必须把i到n-1的表项成块向后移一个位置 插入成功返回1,否则返回0 算法分析:插入运算主要在移动元素的时间上 如果有n个元素,在每个位置上插入元素的概率相等,则datalast 0 1 2 n-1 MaxSize-1 0位置,1位置,n位置,一共有n+1情况 AMN=(
9、n-i)/(n+1)=(n+n-1+1+0)/(n+1)=n/2 ni=0(3)删除 01ilast(i+1至last 向前移动)n-1算法分析 AMN=(n-i-1)/n=(n-1+n-2+1+0)/n=(n-1)/2i=04)使用顺序表的例子(用抽象数据类型)(1)将两个顺序表LA,LB当集合来使用,实现并的运算。即两表中如有相同元素只保留一个。算法:从LB中取一个元素,在LA中查找这一元素,如果未 找到则插入到LA中。templatevoid union(seglist&LA,seglist&LB)int n=LA.length();int m=LB.length();for(int i
10、=0;i=m-1;i+)type x=LB.get(i);int k=LA.find(x);if(k=-1)LA.insert(x,n);n+;(2)实现两个顺序表la和lb的交的运算 即求两个表的公共元素。以表la为基准,每取表la中一个元素,看是否在lb中出现,如果没有出现则在la中删除Templatevoid intersection(seglist&la,seglisttype&lb)int n=la.length();int m=lb.length();int i=0;while(i非零元素个数且非零元素是无规则 分佈的。例子:0 0 0 22 0 0 15 0 11 0 0 0 1
展开阅读全文