收集一些没用图

常见的数据结构用途表示
数据结构图

数组:将数据存放在空间中连续的位置
连续的地址空间
优点:
随机访问 如果知道索引就可以通过 O(l) 进行快速搜索
缺点:
插入删除比较复杂
难以更改大小 因为数组一旦被创建,就无法更改其大小。
如果需要创建更长或更短的数组,得先创建一个新数组,再把原数组中的所有元素复制到新创建的数组中。

常见题目有
将数组反转、
对数组进行排序、

搜索数组中的元素相关题目
有序数组链接 :
无序数组链接:无序数组的搜索类题型
1.给定一个 1-100 的整数数组,请找到其中缺少的数字。
解决方法与代码:https://javarevisited.blogspot.com/2014/11/how-to-find-missing-number-on-integer-array-java.html
2.请在给出的整数数组中找到重复的数字。
解决方法与代码:http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

3.如何在未排序的整数数组中找到最大值与最小值?
解决方法与代码:http://java67.blogspot.com/2014/02/how-to-find-largest-and-smallest-number-array-in-java.html

4.在给定的成对整数数组中,请找出所有总和等于给定数字的组合。
解决方法与代码:http://javarevisited.blogspot.com/2014/08/how-to-find-all-pairs-in-array-of-integers-whose-sum-equal-given-number-java.html

5.如果数组中有多个重复项,如何找到重复的数字?
解决方法与代码:http://javarevisited.blogspot.com/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html

6.用 Java 语言实现,在给出的数组中,删除重复项。
解决方法与代码:http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html
7.用 quicksort 算法实现对整数数组的排序。
解决方法和代码:http://javarevisited.blogspot.com/2014/08/quicksort-sorting-algorithm-in-java-in-place-example.html
8.如何删除现有数组中的重复项?
解决方法和代码:http://javarevisited.blogspot.com/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html
9.用 Java 语言把数组进行反转。
解决方法和代码:http://javarevisited.blogspot.com/2013/03/how-to-reverse-array-in-java-int-String-array-example.html
10.如何在不调用库的情况下删除数组中的重复项?
解决方法和代码:http://javarevisited.blogspot.sg/2014/01/how-to-remove-duplicates-from-array-java-without-collection-API.html

十个问题太少?更多复杂问题,可访问:http://javarevisited.blogspot.sg/2015/06/top-20-array-interview-questions-and-answers.html

解决方案 解决数组相关问题的关键是要熟悉数组的数据结构和基本的构造,如循环、递归等等

数组的变向问题 字符串问题
1.如何输出字符串中重复的字符?
解决方法与代码:http://java67.blogspot.sg/2014/03/how-to-find-duplicate-characters-in-String-Java-program.html

▌2.如何判断两个字符串是否互为回文?
解决方法与代码:http://javarevisited.blogspot.sg/2013/03/Anagram-how-to-check-if-two-string-are-anagrams-example-tutorial.html

▌3.如何找出字符串首个非重复的字符?
解决方法与代码:https://javarevisited.blogspot.com/2014/03/3-ways-to-find-first-non-repeated-character-String-programming-problem.html

▌4.如何用递归的方法将字符串进行反转?
解决方法与代码:https://javarevisited.blogspot.com/2012/01/how-to-reverse-string-in-java-using.html

▌5.如何判断一个字符串是否只包含数字?
解决方法与代码:http://javarevisited.blogspot.sg/2012/10/regular-expression-example-in-java-to-check-String-number.html

▌6.如何找到字符串中重复的字符?
解决方法与代码:http://java67.blogspot.sg/2014/03/how-to-find-duplicate-characters-in-String-Java-program.html

▌7.如何计算一个字符串中元音字母和辅音字母的个数?
解决方法与代码:http://java67.blogspot.sg/2013/11/how-to-count-vowels-and-consonants-in-Java-String-word.html

▌8.如何计算一个给定字符在字符串中出现的次数?
解决方法与代码:https://javarevisited.blogspot.com/2012/12/how-to-count-occurrence-of-character-in-String.html

▌9.如何找出一个字符串的所有排列组合?
解决方法与代码:http://javarevisited.blogspot.com/2015/08/how-to-find-all-permutations-of-string-java-example.html

▌10.在不使用任何方法库的情况下,如何将一句话中的单词进行反转?
解决方法与代码:http://www.java67.com/2015/06/how-to-reverse-words-in-string-java.html

▌11.如何判断一个字符串是否为另一个字符串循环移动的结果?
解决方法与代码:

http://www.java67.com/2017/07/string-rotation-in-java-write-program.html

▌12.如何判断一个字符串是否为回文?
解决方法与代码:http://java67.blogspot.com/2015/06/how-to-check-is-string-is-palindrome-in.html

这些问题有助于提高你对字符串数据结构的理解。如果你在没有外界帮助的情况下,可以解决所有这些字符串问题,那么你的水平已经很棒了。

若想了解更多复杂的问题,建议学习一下《Algorithm Design Manual by Steven Skiena》这本书中的问题,里面大都是难度很高的算法问题。
如果你需要更多的练习,可以参考这一组问题,包含20个字符串编程问题。

问题链接:https://javarevisited.blogspot.com/2015/01/top-20-string-coding-interview-question-programming-interview.html

链表:特点 线性存储
优点:插入,删除时间复杂度o(1)
缺点:不支持随机访问

链表也可以说就是一个节点列表,每个节点中包含存储的值和下一个节点的地址。也正是因为这种结构,在链表里添加和删除元素很容易,你只需要更改链接而不用创建新的数组。但是搜索会很困难,并且在单链表中找到一个元素就需要 O(n)个时间。

分类
单链表,允许你在一个方向上进行遍历;

双链表,可以在两个方向上进行遍历;

循环链表,最后节点的指针指向第一个节点从而形成一个环形的链;

因为链表是一种递归数据结构,所以在解决链表问题时,熟练掌握递归算法就显得更加重要了。

下面是关于链表的一些最常见、热门的面试问题,大家可以着重练习:

▌1.如何在一次递归后找到单链表的中间元素?
解决方法和代码:http://javarevisited.blogspot.sg/2012/12/how-to-find-middle-element-of-linked-list-one-pass.html

▌2.检查给定的链表中是否包含循环链表,并找出循环链表的起始节点。
解决方法和代码:http://javarevisited.blogspot.sg/2013/05/find-if-linked-list-contains-loops-cycle-cyclic-circular-check.html

▌3.如何将列表反转(倒置)?
解决方法和代码:http://www.java67.com/2016/07/how-to-reverse-singly-linked-list-in-java-example.html

▌4.如何在没有递归的情况下反转单链表?
解决方法和代码:http://javarevisited.blogspot.sg/2017/03/how-to-reverse-linked-list-in-java-using-iteration-and-recursion.html

▌5.删除未经过排序的链表中重复的节点。
解决方法和代码:https://www.geeksforgeeks.org/remove-duplicates-from-an-unsorted-linked-list/

▌6.计算单链表的长度。
解决方法和代码:http://javarevisited.blogspot.sg/2016/05/how-do-you-find-length-of-singly-linked.html

▌7.找出单链表中倒数第三个节点。
解决方法和代码:http://javarevisited.blogspot.sg/2016/07/how-to-find-3rd-element-from-end-in-linked-list-java.html

▌8.如何使用 Stack 查找两个链表的和?
解决方法和代码:https://www.geeksforgeeks.org/sum-of-two-linked-lists/

这些问题可以帮你提升解决问题的能力,加深对链表数据结构的了解。

关于数组和链表间的区别,可详细阅读:http://javarevisited.blogspot.sg/2013/07/difference-between-array-and-linked-list-java.html

更多复杂问题,可访问:http://javarevisited.blogspot.sg/2017/07/top-10-linked-list-coding-questions-and.html

=============================
栈:
特点:先进后出

队列:
特点:先进先出

树:

树结构是一种将数据进行分层存储的数据结构。根据数据存储方式的不同,存在不同类型的树,比如二叉树,其中每个节点至多有两个子节点。

和二叉查找树一样,它们都是最流行的树形式的数据结构。因此,你会发现很多问题基于它们的问题,如计算节点数,如何进行遍历,计算深度,判断它们是否平衡。

解决二叉树问题的关键是要有扎实的知识理论,如什么是二叉树的大小或深度,什么是叶,以及什么是节点。还有对当前流行的遍历算法的理解,如前序遍历、后序遍历和中序遍历。

下面是一系列常在软件开发面试中出现的二叉树热门问题:

▌1.如何部署使用二叉查找树?
解决方法与代码:http://javarevisited.blogspot.sg/2015/10/how-to-implement-binary-search-tree-in-java-example.html#axzz4wnEtnNB3

▌2.给定一个二叉树,如何进行前序遍历?
解决方法与代码:http://javarevisited.blogspot.sg/2016/07/binary-tree-preorder-traversal-in-java-using-recursion-iteration-example.html#axzz5ArdIFI7y

▌3.在不使用递归的情况下,如何对给定二叉树进行前序遍历?
解决方法与代码:http://www.java67.com/2016/07/binary-tree-preorder-traversal-in-java-without-recursion.html

▌4.给定一个二叉树,如何进行中序遍历?
解决方法与代码:http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html

▌5.在不使用递归的情况下,如何使用中序遍历输出给定二叉树的所有节点?
解决方法与代码:http://www.java67.com/2016/08/binary-tree-inorder-traversal-in-java.html

▌6.如何实现后序遍历算法?
解决方法与代码:http://www.java67.com/2016/10/binary-tree-post-order-traversal-in.html

▌7.在不使用递归的情况下,如何对二叉树进行后序遍历?
解决方法与代码:http://www.java67.com/2017/05/binary-tree-post-order-traversal-in-java-without-recursion.html

▌8.如何输出一个二叉查找树的所有叶子?
解决方法与代码:http://www.java67.com/2016/09/how-to-print-all-leaf-nodes-of-binary-tree-in-java.html

▌9.如何计算一个给定二叉树的叶子节点数目?
解决方法与代码:http://javarevisited.blogspot.sg/2016/12/how-to-count-number-of-leaf-nodes-in-java-recursive-iterative-algorithm.html

▌10.给定一个数组,如何对其进行二叉搜索?
解决方法与代码:http://javarevisited.blogspot.sg/2015/10/how-to-implement-binary-search-tree-in-java-example.html#axzz4wnEtnNB3

如果你觉得自己对二叉树编程的理解还不够,无法独自解决这些问题,我列出了我使用过的书籍:

http://javarevisited.blogspot.sg/2015/07/5-data-structure-and-algorithm-books-best-must-read.html

http://javarevisited.blogspot.sg/2018/01/top-5-free-data-structure-and-algorithm-courses-java--c-programmers.html

二叉树:
特点:

搜索树:

平衡树

红黑树:

字典树:

B-树:

B+树:

B*树

其它算法编程问题

除了数据结构问题,大多数编程面试也会问有关算法、设计、位操作和一般的逻辑问题,在这部分中我会介绍这些问题。

在实际问题中应用这些概念是十分重要的,因为在面试中它们往往都比较难对付。多加练习不仅可以让你对这些概念更熟悉,也会让你在面试过程中更有信心。

▌1.如何实现冒泡排序算法?
解决方法与代码:http://javarevisited.blogspot.sg/2014/08/bubble-sort-algorithm-in-java-with.html#axzz5ArdIFI7y

▌2.如何用迭代实现快速排序算法?
解决方法与代码:http://javarevisited.blogspot.sg/2016/09/iterative-quicksort-example-in-java-without-recursion.html#axzz5ArdIFI7y

▌3.如何实现插入排序算法?
解决方法与代码:http://www.java67.com/2014/09/insertion-sort-in-java-with-example.html

▌4.如何实现归并排序算法?
解决方法与代码:http://www.java67.com/2018/03/mergesort-in-java-algorithm-example-and.html

▌5.如何实现桶排序算法?
解决方法与代码:https://javarevisited.blogspot.com/2017/01/bucket-sort-in-java-with-example.html

▌6.如何实现计数排序算法?
解决方法与代码:http://www.java67.com/2017/06/counting-sort-in-java-example.html

▌7.如何实现基数排序算法?
解决方法与代码:http://www.java67.com/2018/03/how-to-implement-radix-sort-in-java.html

▌8.在不使用第三个变量的情况下,如何交换两个数字的值?
解决方法与代码:http://www.java67.com/2015/08/how-to-swap-two-integers-without-using.html

▌9.如何判断两个矩形是否有重叠?
解决方法与代码:http://javarevisited.blogspot.sg/2016/10/how-to-check-if-two-rectangle-overlap-in-java-algorithm.html

▌10.如何设计一个自动贩售机?
解决方法与代码:https://javarevisited.blogspot.com/2016/06/design-vending-machine-in-java.html

推荐阅读:

《Cracking The Code Interview》书中介绍了189个编程问题及解决方法

50个电面编程问题:

http://javarevisited.blogspot.sg/2015/02/50-programmer-phone-interview-questions-answers.html

有关书籍:

https://javarevisited.blogspot.com/2016/06/top-5-books-for-programming-coding-interviews-best.html

练习解决的实际问题越多,准备就越充分。希望这份面试资源对大家有帮忙,面试顺利,都能获得好结果!

程序员图谱
https://zhuanlan.zhihu.com/p/28781950?ref=myread

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值