既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
目录
一、队列
1、基本介绍
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
2、示意图
3、队列的特点
先进先出:
在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又被称为先进先出。
二、数组模拟队列
1、数组队列初始化
根据图示进行初始化:
class ArrayQueue{ private int maxSize; //表示数组最大容量 private int front; //队列头 private int rear; //队列尾 private int[] arr; //该数组用于存放数据,模拟队列 //创建队列构造器,进行初始化 public ArrayQueue(int arrMaxSize){ maxSize = arrMaxSize; arr = new int[maxSize]; front = -1; //front指向队列头的前一个位置 rear = -1; //指向队列尾 } }
2、判断方法
▶ 判断队列是否为空
front 是指向队列的头的前一个位置,rear是指向队列的尾,当front和rear重合时,队列为空。
public boolean isEmpty(){ return rear == front; }
▶ 判断队列是否满
因为数组有最大容量,所以直接判断rear(队列尾)是否在数组的最后位置。数组的下标从零开始。
public boolean isFull(){ return rear == maxSize - 1; }
3、增删改查的方法
▶ 向队列中添加数据,入队列
▷ 添加数据首先判断数组是否满,如果满,则无法添加数据,数组未满则只需要动 rear(进行尾部移动),rear先加一,然后在数组中存放数据。
//添加数据到队列 public void addQueue(int n){ //判断队列是否满 if(isFull()){ System.out.println("队列满,不能再添加"); return; } rear++; //让rear后移 arr[rear] = n; }
▶ 删除队列中数据,出队列
▷ 因为队列的特点先进先出,所以我们需要动队列的头,当然首先应该判断队列是否为空,为空则不能出队列;然后(front是指向队列头的前一个位置)先将front 加一到达队列的头的位置,再把这个值返回即可。有人可能会问队列的头呢?当front == -1时,数组下标为0 的数据为头,一旦front进行加一后,数组下标为1的数据就为头了,也就是当front进行变化后队列的头就变了。
//获取队列数据,出队列 public int getQueue(){ //判断队列是否为空 if(isEmpty()){ //通过抛出异常 throw new RuntimeException("队列为空,不能获取数据"); } front++; //front后移 return arr[front]; }
▶ 显示队列中所有数据
▷ 因为是数组模拟的队列,将数组进行遍历输出即可。
//显示队列的所有数据 public void showQueue(){ //判断是否为空 if(isEmpty()){ System.out.println("队列为空,没有数据"); return; } //遍历 for(int i = 0; i < arr.length ; i++){ System.out.printf("arr[%d] = %d\n", i , arr[i] ); } }
4、注意
这样的数组队列是不可逆的,当front在数组的末尾时,这个数组队列就不可用了,因为front 和 rear 不能循环到数组的前面去,所以这样的数组队列是非常局限的。而链表队列,就是队列是由单链表形成的,就没有数组大小的限制,可以无限的入队列和出队列,单链表的操作非常的简单,后续的文章会介绍。那么数组队列是否也可以无限入队列和出队列呢?当然可以,那么怎么可以实现呢?数组队列的局限在哪里?不就是front 和 rear 的指向不能回过头来指向数组的空位置。
只要解决了front 和 rear 能够返回到数组的空位置,是不是就能解决这个局限性的问题呢,因为出队列和入队列都是通过 front 和 rear 操作的。
三、数组模拟环形队列
1、初始化
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
9)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!