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
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)有序表按值传递,不能重复,有序表不能解非原生排序,因为内部不知道按什么排序。

 

 
posted @ 2024-07-26 07:05  七七喜欢你  阅读(10)  评论(0编辑  收藏  举报