电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

数据结构与算法——C语言和Java语言描述 ppt及答案和其他资源05数组与矩阵

41页
  • 卖家[上传人]:E****
  • 文档编号:89116021
  • 上传时间:2019-05-18
  • 文档格式:PPTX
  • 文档大小:3.30MB
  • / 41 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、数组 集合 矩阵,2019年5月18日星期六,第五章,目录,Contents,数组的基本概念,动态数组(向量类),集合的概念和集合类的设计,矩阵类的设计,特殊矩阵,稀疏矩阵, 数组定义, 实现机制, 抽象数据类型, JAVA语言支持的数组功能,01,PART,数组的基本概念, 数组定义,数组是n(n1)个相同数据类型的数据元素a0,a1,a2,.,an-1构成的占用一块地址连续的内存单元的有限序列。,数组中任意一个元素可以用该元素在数组中的位置来表示,数组元素的位置通常称作数组的下标。,数组, 数组线性表,数组要求其元素占用一块地址连续的内存单元空间,而线性表无此要求; 线性表的元素是逻辑意义上不可再分的元素,而数组中的每个元素还可以是一个数组; 数组的操作主要是向某个下标的数组元素中存数据和取某个下标的数组元素,这和线性表的插入、删除操作不同。,不同点,相同点,它们都是若干个相同数据类型的数据元素a0,a1,a2,.,a0-1构成的有限序列。, 数组的定义,数组,数组符合线性结构的定义。 线性结构(包括线性表、堆栈、队列、串)的顺序存储结构实际就是使用数组来存储。可见,数组是其他数据

      2、结构实现顺序存储结构的基础,是软件设计中最基础的数据结构。, 数组的实现机制,()、一维数组(n个元素)中任一元素ai的内存单元地址 Loc(ai)=LOC(a)+i*k (0i n) ()、一个m行n列的二维数组 LOC(aij)=LOC(a00)+(i*n+j)*k (0im,0jn),a的内存单元地址,每个元素所需的字节个数,a0的内存单元地址,每个元素所需的字节个数, 数组的实现机制,一个mn的二维数组可以看成是m行的一维数组,或者n列的一维数组。,数组抽象数据类型,数组的数据集合可以表示为a0, a1, a2, ., an-1,每个数据元素的数据类型可以是任意类类型或基本数据类型。,1)分配内存空间acclocate() 2)取数组长度getLength() 3)存数组元素set(i, x) 4) 取数组元素get(i),数据集合 操作集合,JAVA语言支持的数组功能,01,02,03,int a = new int10;,int c = a.length;,a1 = 5;,04,int d = a1;,JAVA语言支持的数组功能,Java语言可以定义对象数组。 public

      3、 class Position private int x; private int y; public Position() x = y = 0; 则可以定义如下4个对象的对象数组pos: Position pos = new Position4; 要注意的是,对于对象数组来说,其中的每个数组元素都需要通过new运算符单独创建。例如: Position pos = new Position4; for(int i = 1; i 4; i+) pos i = new Position ();,对象数组, 向量类定义, 程序实例, 设计说明,02,PART,动态数组(向量类),向量类定义,向量类,Java语言只直接支持上述基本的数组操作。如果程序开始时定义的数组长度为10,且数组中已经存放了若干数据元素,要在程序运行过程中扩充数组长度为20,且把数组中原先存放的数据元素原样保存,则系统不提供直接支持,需要应用程序自己实现。 向量类Vector扩充了数组的功能,提供了自动扩充数组长度、且把数组中原先存放的数据元素原样保存的功能。Vector类在java.util包中。 这里我们设计一个和V

      4、ector类功能类同的MyVector类。,程序实例 MyVector类,public class MyVector private Object elementData; private int elementCount; private void ensureCapacity(int minCapacity) /扩充内存 int oldCapacity = elementData.length; if (minCapacity oldCapacity) Object oldData = elementData; int newCapacity = oldCapacity * 2; if (newCapacity minCapacity) newCapacity = minCapacity; elementData = new ObjectnewCapacity; System.arraycopy(oldData, 0, elementData, 0, elementCount); public MyVector()/构造函数 this(10); public MyVector(in

      5、t initialCapacity) /构造函数 elementData = new ObjectinitialCapacity; elementCount = 0; ,public void add(int index,Object element) /在index处添加 if (index = elementCount + 1) throw new ArrayIndexOutOfBoundsException(index + “ “ + elementCount); ensureCapacity(elementCount + 1); System.arraycopy(elementData, index, elementData, index + 1, elementCount - index); elementDataindex = element; elementCount+; public void add(Object element) /在最后添加 add(elementCount,element); public void set(int index,Object el

      6、ement) /重置元素 if (index = elementCount) throw new ArrayIndexOutOfBoundsException(index + “ = “ + elementCount); elementDataindex = element; public Object get(int index) /取index处元素 if (index = elementCount) throw new ArrayIndexOutOfBoundsException(index); return elementDataindex; public int size() /取元素个数 return elementCount; ,设计说明,(1)MyVector类只支持对象数组,不支持基本数据类型数组。基本数据类型(如int)要用相应的包装类(如Integer类)包装。 (2)MyVector类提供的自动扩充数组长度的功能,是由成员函数ensureCapacity(minCapacity)实现的。 实现过程是:首先,保存原数组长度和原数组元素;然后,让新数组长度newCa

      7、pacity为原数组长度的2倍或参数minCapacity的较大者;最后,重新创建长度为newCapacity的数组,并把原来的数组元素复制到新数组的开始位置。 (3)添加成员函数add(index,element)的实现过程:首先,用elementCount+1为参数调用ensureCapacity()成员函数,确保一定有足够的数组空间添加新的数据元素;然后,调用System类的数组拷贝成员函数arraycopy(),把数组elementData中从下标index至最后共计elementCount-index个数组元素后移一个位置。最后,把数据元素element添加到下标为index的数组中。,MyVector类 ensureCapacity(minCapacity),设计说明,(1)MyVector类只支持对象数组,不支持基本数据类型数组。基本数据类型(如int)要用相应的包装类(如Integer类)包装。 (2)MyVector类提供的自动扩充数组长度的功能,是由成员函数ensureCapacity(minCapacity)实现的。 实现过程是:首先,保存原数组长度和原数组元素;

      8、然后,让新数组长度newCapacity为原数组长度的2倍或参数minCapacity的较大者;最后,重新创建长度为newCapacity的数组,并把原来的数组元素复制到新数组的开始位置。 (3)添加成员函数add(index,element)的实现过程:首先,用elementCount+1为参数调用ensureCapacity()成员函数,确保一定有足够的数组空间添加新的数据元素;然后,调用System类的数组拷贝成员函数arraycopy(),把数组elementData中从下标index至最后共计elementCount-index个数组元素后移一个位置。最后,把数据元素element添加到下标为index的数组中。,MyVector类 add(index,element), 集合的概念, 集合数据抽象类型, 集合类,03,PART,集合的概念和集合类的设计,集合的概念,集合,集合(Set)是具有某种相似特性的事物的全体。换一种说法,也可以说,集合是某种具有相同数据类型的数据元素全体。 集合的一个重要特点是其中的数据元素无序且不重复。 集合通常用一对花括号表示。例如,如下都是集合

      9、的例子: mySet1 = true, false mySet2 = 1, 3, 5, 7, 9 mySet3 = 5, 3, 1, 9, 7 mySet4 = 1, 3, 5, 7 mySet5 = 如果一个数据元素x在一个集合A中,则说数据元素x属于集合A; 如果一个数据元素x不在一个集合A中,就说数据元素x不属于集合A。,集合的概念,集合,如果集合A中的所有数据元素都在集合B中,则说集合B包含集合A。 集合A和集合B相等当且仅当集合A包含集合B,且集合B也包含集合A。 没有一个数据元素的集合称做空集合。 集合的运算主要有三种: 两个集合的并AB 两个集合的交AB 两个集合的差A-B AB是一个集合,其数据元素或者属于集合A,或者属于集合B(或者同时属于集合A和集合B)。 AB是一个集合,其数据元素同时属于集合A和集合B。 A-B是一个集合,其数据元素由属于集合A而不属于集合B的所有数据元素组成。,集合数据抽象类型,数据 集合,数据元素集合可以表示为a0, a1, a2, , an-1,数据类型可是任意的类型。 操作集合: (1)添加add(obj):在集合中添加数据元素obj。 (2)删除remove(obj):删除集合中的数据元素obj。 (3)属于contain(obj):数据元素obj是否属于集合。 (4)包含include(otherSet):当前对象集合是否包含集合otherSet。 (5)相等eqauls(otherSet):当前对象集合是否和集合otherSet相等。 (6)数据元素个数size():返回集合中的数据元素个数。 (7)集合空否isEmpty(): 另外,还有前面讨论过的集合的并、交、差运算。,集合类,集合类,集合的特点是数据元素无序且不重复。 集合类既可以基于向量类来实现,也可以用其他方法实现。常用的另一种实现方法是基于哈希表来实现。这里讨论基于向量类的集合类实现

      《数据结构与算法——C语言和Java语言描述 ppt及答案和其他资源05数组与矩阵》由会员E****分享,可在线阅读,更多相关《数据结构与算法——C语言和Java语言描述 ppt及答案和其他资源05数组与矩阵》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.