十一。设计数据结构

二.设计数据结构

1.LFU

(1)LinkedHashMap,LinkedHashSet。使得链表拥有了随机访问的功能(数组具有随机访问的特点)

(2)LFU算法中可以自顶向下编程,把重要重复代码抽象出来

(3)HashMap.putIfAbsent(key,val)方法

(4)LFU的实现还是挺复杂的,得多看看

2.优先级队列

和单端队列的区别,无论怎样入队,出队的序列是有序的

3.设计循环队列

4.实现栈和队列

实现栈:

(1)开始时:topp=-1(2)入栈:arr[++top]=e(3)出栈:e=arr[top--](4)取栈顶:e=arr[top](5)栈空:top=-1(6)栈大小:size=top+1

  ***top指向栈顶元素

实现队列:(循环队列)

(1)开始时:front=rear=0(2)入队:rear=(rear+1)%len(3)出队:front=(front+1)%len(4)取队头:front,取队尾:(rear+len-1)%len

(5)队空:front=rear(6)队满:(rear+1)%len=front(7)队长:(rear-front+len)%len

  ***因为要区分队空和队满,要浪费一个存储单元

  ***front指向队头元素,rear指向队尾元素的下一个位置

5.实现随机集合

N380 O(1)时间插入,删除和获取随机元素。也是一个设计题

(1)数组可以随机访问元素

(2)java生成随机数

10/17

6.设计哈希集合(N705)

(1)哈希表存的是键值对

(2)哈希表让数组有了随机访问的功能

7.设计哈希映射

(1)处理冲突的方法:拉链法,开放寻址法

(2)INF:infinity。表示无穷的意思(无穷大,无穷小)。int INF=Integer.MAX_VALUE;int INF=Integer.MIN_VALUE

原文地址:https://www.cnblogs.com/midiyu/p/15416760.html