Android复习数据结构.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1. 链表与数组。 2. 队列和栈,出栈与入栈。 3. 链表的删除、插入、反向。 (1)反向 链表的定义: class Node{ public int val; public Node next; public Node(int val){this.val=val;} } 反向分为4步: 两个临时变量:当前节点curr和前一个节点prev 第一步:保存当前节点的下一个节点到tmp中; 第二步;将当前节点的下一个指向前一个; 第三步;将前一个prev指向指向当前节点curr; 第四步:将当前节点curr指向tmp,也就是实际上的下一个节点 public static Node reversal(Node head){ Node prev=null; Node curr=head; while(curr!=null){ Node tmp=curr.next; curr.next=prev; prev=curr; curr=temp; } return prev; } 4. 字符串操作。 5. Hash表的hash函数,冲突解决方法有哪些。 答案:Hash 哈希表(Hash Table,也叫散列表),是根据关键码值 (Key-Value) 而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。哈希表的实现主要需要解决两个问题,哈希函数和冲突解决。 哈希函数 哈希函数也叫散列函数,它对不同的输出值得到一个固定长度的消息摘要。理想的哈希函数对于不同的输入应该产生不同的结构,同时散列结果应当具有同一性(输出值尽量均匀)和雪崩效应(微小的输入值变化使得输出值发生巨大的变化)。 冲突解决 开放地址法:以发生冲突的哈希地址为输入,通过某种哈希冲突函数得到一个新的空闲的哈希地址的方法。有以下几种方式: 线性探查法:从发生冲突的地址开始,依次探查下一个地址,直到找到一个空闲单元。 平方探查法:设冲突地址为d0,则探查序列为:d0+1^2,d0-1^2,d0+2^2... 拉链法:把所有的同义词用单链表链接起来。在这种方法下,哈希表每个单元中存放的不再是元素本身,而是相应同义词单链表的头指针。HashMap就是使用这种方法解决冲突的。 6. 各种排序:冒泡、选择、插入、希尔、归并、快排、堆排、桶排、基数的原理、平均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定。 (1)常见排序算法 稳定排序: 冒泡排序?— O(n2) 插入排序?— O(n2) 桶排序?— O(n); 需要 O(k) 额外空间 归并排序?— O(nlogn); 需要 O(n) 额外空间 二叉排序树排序?— O(n log n) 期望时间; O(n2)最坏时间; 需要 O(n) 额外空间 基数排序?— O(n·k); 需要 O(n) 额外空间 不稳定排序 选择排序?— O(n2) 希尔排序?— O(nlogn) 堆排序?— O(nlogn) 快速排序?— O(nlogn) 期望时间, O(n2) 最坏情况; 对于大的、乱数串行一般相信是最快的已知排序 7. 快排的partition函数与归并的Merge函数。 8. 对冒泡与快排的改进。 (1)对快排的改进 当待排序序列的长度分割到一定大小后,使用插入排序。 从左、中、右三个数中取中间值。 9. 二分查找,与变种二分查找。 1 二分查找   二分查找是一个基础的算法,也是面试中常考的一个知识点。二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。 (图片来自《算法-第4版》) /** * 二分查找,找到该值在数组中的下标,否则为-1 */ static int binarySerach(int[] array, int key) { int left = 0; int right = array.length - 1; // 这里必须是 = while (left = right) { int mid = (left + right) / 2; if (array[mid] == key) { return mid; } else if (array[mid] key) { left = mid + 1; }

文档评论(0)

153****9772 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档