Java数据结构和算法笔记.docxVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Java数据结构和算法笔记

Java数据结构和算法笔记

篇一:Java数据结构和算法笔记

Java数据结构和算法

第0讲综述

参考教材:Java数据结构和算法(第二版),[美]Robertlafore 1.数据结构的特性

数据结构数组有序数组栈队列链表二叉树红-黑树2-3-4树哈希表堆图

优点

比无序的数组查找快提供后进先出方式的存取提供先进先出方式的存取插入快,删除快

查找、插入、删除都快;树总是平衡的查找、插入、删除都快;树总是平衡的;类似的树对磁盘存储有用

如果关键字已知,则存储极快;插入快插入、删除快;对大数据项的存取很快对现实世界建模

缺点

删除和插入慢,大小固定存取其他项很慢存取其他项很慢查找慢算法复杂算法复杂

删除慢,如果不知道关键字则存储很慢,对存储空间使用不充分对其他数据项存取慢有些算法慢且复杂

插入快;如果知道下标,可以非常快地存取查找慢,删除慢,大小固定

查找、插入、删除都快(如果树保持平衡)删除算法复杂

2.经典算法总结

查找算法:线性查找和二分查找排序算法:用表展示

第一讲数组

1.Java中数组的基础知识

1)创建数组

在Java中把数组当作对象来对待,因此在创建数组时必须使用new操作符:

一旦创建数组,数组大小便不可改变。

2)访问数组数据项

数组数据项通过方括号中的下标来访问,其中第一个数据项的下标是0:

3)数组的初始化

当创建数组之后,除非将特定的值赋给数组的数据项,否则它们一直是特殊的null对象。

2.面向对象编程方式

1)使用自定义的类封装数组

2)添加类方法实现数据操作

测试MyArray类方法:

3.有序数组

1)有序数组简介以及其优点

有序数组是一种数组元素按一定的顺序排列的数组,从而方便使用二分查找来查找数组中特定的元素。有序数组提高了查询的效率,但并没有提高删除和插入元素的效率。

2)构建有序数组

将2.1中自定义的类封装数组MyArray的方法改为如下:

4.查找算法

1)线性查找

在查找过程中,将要查找的数一个一个地与数组中的数据项比较,

直到找到要找的数。在

2.1中自定义的类封装数组

MyArray的

queryByValue方法,使用的就是线性查找。

2)二分查找

二分查找(又称折半查找),即不断将有序数组进行对半分割,每次拿中间位置的数和要查找的数进行比较:如果要查找的数中间数,则表明要查的数在数组的前半段;如果要查的数中间数,则表明该数在数组的后半段;如果要查的数=中间数,则返回中间数。

测试该二分查找方法:

篇二:数据结构面试中常见算法小结

一、二叉树遍历思想:

1、非递归前序遍历

List作栈,top为栈针

While循环

当前点非空,输出

右子非空,入栈

左子非空,入栈

栈非空,栈顶为当前点,出栈;否则break

2、非递归中序遍历

List作栈,top为栈针

While循环(但前点非空或栈非空)

当前点非空,入栈,左子为当前点;

否则,栈顶为当前点,出栈;输出,右子为当前点

3、非递归后序遍历

List1作数据栈,list2作标识栈,top为数据栈针,tag为标识作判断用

Do循环

While循环(当前点非空)

入数据栈,标识栈对应设1;左子为当前点。(本内循环相当于把所有左子入栈)数据栈顶为当前点,标识栈顶为tag且出栈

Tag为1,数字2进标识栈,右子为当前点

否则为2,数据栈出栈顶,输出,当前点为null;

While(当前点非空或数据栈非空)---与do配套

二叉树的各遍历算法:

packagecom.job.basic;

importjava.util.*;

publicclassBinaryTree{

//递归前序遍历

publicvoidrPreOrder(Noderoot){

if(root!=null)System.out.print(root.data);

if(root.left!=null)rPreOrder(root.left);

if(root.right!=null)rPreOrder(root.right);

}

//前序遍历

publicvoidpreOrder(Noderoot){

ArrayListstack=n

文档评论(0)

wentlz123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档