LeetCode笔记—Java语言->线程池与任务队列
队列的简述:
队列:是一片连续的存储区域(有一个头指针,一个尾指针->最后一个元素的下一位)FIFO-先入先出。
队列-假溢出:队列中还有空的位置,只是因为尾节点走到了最后一位。
循环队列:(走到尾部在从头开始):为了解决队列假溢出。
队列的典型应用场景(通常用在缓冲区用途):
1.CPU的超线程技术
2.线程池的任务队列(函数式编程思想-范型编程思想):
leetcode:622. 设计循环队列
此题思路:略
class MyCircularQueue {
int[] queue;
int head;
int tail;
int count;
//构造器,设置队列长度为 k 。
public MyCircularQueue(int k) {
queue = new int [k];//采用数组来做队列
head = 0;//头指针
tail = 0;//尾指针--指向下一个插入元素的位置
count = 0;//队列中的元素数
}
//向循环队列插入一个元素。如果成功插入则返回真。
public boolean enQueue(int value) {
if(isFull())//队列满了就不能插入了
return false;
queue[tail] = value;//将元素插入到tail所在的位置上。
/*(tail+1)%queue.length就启到了循环的作用,因为tail在插入一个元素后,就需要往后走一位
当tail处于length-1的位置时,再往后走就需要走到队列的起始点,这时我们就需要对queue的length
取余,(length-1+1)%length=0,tail就回到了起始点*/
tail = (tail+1)%queue.length;
count++;//元素数量加一
return true;
}
//从循环队列中删除一个元素。如果成功删除则返回真
public boolean deQueue() {
if(isEmpty())//队列为空就不能出队了
return false;
head = (head+1)%queue.length;//出队,首节点向后移动一位,同时(head+1)%queue.length也是起到了循环队列的作用
count--;//元素数量减一
return true;
}
//从队首获取元素。如果队列为空,返回 -1
public int Front() {
if(isEmpty())//列表为空,返回-1
return -1;
return queue[head];//返回队首元素
}
//获取队尾元素。如果队列为空,返回 -1
public int Rear() {
if(isEmpty())//列表为空,返回-1
return -1;
/*因为tail的位置是在下一个要插入的位置上,所以队尾元素在他的前一个位置上,
当正常情况下,只需要tail-1即可。但是当tail在0位置上的时候,就需要一些特
殊处理。所以我们采用(tail-1+queue.length)%queue.length获取tail的前一
个位置,当tail处在正常情况时,不会对结果产生影响。而当tail处在0位置时,
0-1=-1,-1+queue.length=queue.length-1。这样就得到了队列的最后一个位置*/
return queue[(tail-1+queue.length)%queue.length];
}
//检查循环队列是否为空。
public boolean isEmpty() {
return count == 0;//队列中无元素,队列就是空的
}
//检查循环队列是否已满。
public boolean isFull() {
return count == queue.length;//当队列中元素和队列长度相同,那么队列就满了
}
}
/**
* Your MyCircularQueue object will be instantiated and called as such:
* MyCircularQueue obj = new MyCircularQueue(k);
* boolean param_1 = obj.enQueue(value);
* boolean param_2 = obj.deQueue();
* int param_3 = obj.Front();
* int param_4 = obj.Rear();
* boolean param_5 = obj.isEmpty();
* boolean param_6 = obj.isFull();
*/
leetcode:641. 设计循环双端队列
此题思路:略
class MyCircularDeque {
int[] queue;
int head;
int tail