class 4:一些基础的数据结构
1.基本数据结构
链表:
1 public class Node { 2 public int value; 3 public Node next; 4 5 public Node(int data) { 6 value = data; 7 } 8 }
1 public static class DoubleNode{ 2 public int value; 3 public DoubleNode last; 4 public DoubleNode next; 5 public DoubleNode(int data) 6 { 7 value =data; 8 } 9 }
队列:
ac3:单、双向链表实现队列,两种 v48.18
ac6:数组实现队列思路: 感觉是一种循环队列的感觉,begin end size
push end++ size++ pop begin++ size--;v57.22 其中处理可以使用取余来处理好像比价简单。
栈:
ac4:双向链表实现栈?
ac5:数组实现栈思路:数组+index控制,index为要放入元素的位置 放入index++再放入 index--删除??。
2.单链表和双向链表最简单的练习
- 单链表和双链表如何反转
ac1:写这个代码,提示:pre代表当前所指,next代表next节点所指的下个节点public static Node reverseLinkedList(Node head) v19.46
- 把给定的值都删除
ac2:提示:头部可能被删除,所以要返回新头部Node,要考虑一些边界条件很麻烦。public static Node removeValue(Node node,int num) v33.47 -
3.经典面试题
- 实现一个特殊的栈,在基本功能基础上,再实现返回一个栈中最小元素的功能。
pop、push、getMin操作的时间复杂度都是O(1)。 设计栈类型可以使用现成的栈结构。ac7:提示:增加一个最小栈的功能,push过程当前值大于栈顶,重复压入栈顶,小于栈顶的时候push当前值。
- 如何只用栈结构实现队列结构,如何用队列结构实现栈结构。
- ac8:如何使用栈实现队列(拼出队列)
提示:创建两个栈 push栈与pop栈 原则 1倒数据的时候要一次性倒完。2pop栈为空 push栈才能倒数据进入pop栈。v1.21.10 - ac9:如何使用队列实现栈
提示:两个队列来回使用,每次剩余最后一个数给用户。(效果比较差)v1.28.58
- ac8:如何使用栈实现队列(拼出队列)
4.递归过程
(大问题拆分为小问题)
- ac10:求一个数组中L到R的最大值 (使用递归来做,我觉得边界问题要麻烦一点。)v1.35.27
分析递归的时候尽量画递归的调用图。
- Master公式:分析递归方法的时间复杂度。
计算递归函数的复杂度,主要要将其写为T(N)=a*T(N/b)+O(N/d)然后比较log ba 与d之间的大小关系决定。
5.哈希表与有序表
ps:内部数据量不管多大,它的各种操作复杂度都是O(1)
- 非基础类型的key放入hashmap中占用8字节。
- hashmap原生的一些数据类型都是按值传递。Integer等等
- 非原生类型按引用传递。自定义的数据类型。
- TreeMap是有序表,有序表按值传递,然后一些操作都是O(logN)有序表按值传递,不能重复,有序表不能解非原生排序,因为内部不知道按什么排序。
本文来自博客园,作者:七七喜欢你,转载请注明原文链接:https://www.cnblogs.com/EternalX/p/18324454