版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yoonerloop/article/details/82390968
队列是一种可以实现“先进先出”的数据结构,属于线性表的一种。它具有如下特点:
-
队列中的数据元素遵循“先进先出”的原则,简称FIFO结构。
-
在队尾添加元素,在队头删除元素。
以下连篇文章将分别介绍队列的数组实现、链表实现,双端队列、环形队列、优先队列。
一、数组实现队列
注意:队尾、队头指的是元素的位置,而不是元素的值,位置具有唯一性,值可能重复
1、构造方法
class ArrayQueue {
//队头
private int front;
//队尾
private int end;
//队列有效长度
private int elements;
//队列
private long[] queue;
public ArrayQueue() {
queue = new long[5];
front = -1;
end = -1;
}
public ArrayQueue(int length) {
queue = new long[length];
front = -1;
end = -1;
}
}
2、添加队列
/**
* 添加队列
*/
public void add(long value) {
if (isFull()){
System.out.println("队列已满,请删除");
throw new IndexOutOfBoundsException();
}
if (isEmpty()){
front = 0;
}
queue[++end] = value;
elements++;
}
3、删除队列
/**
* 删除队列
*/
public long delete() {
long value = queue[front];
elements--;
front++;
return value;
}
4、查看队头
/**
* 查看队头
*/
public long getFront() {
if (isEmpty()) {
System.out.println("队尾为空");
return 0;
}
return queue[front];
}
5、查看队尾
/**
* 查看队尾
*/
public long getEnd() {
if (isEmpty()) {
return -1;
}
return queue[end];
}
6、查看队列元素个数
/**
* 查看队列里面几个元素
*/
public int size() {
return elements;
}
7、队列是否为空
/**
* 队列是否为空
*/
public boolean isEmpty(){
return elements == 0;
}
8、队列是否满了
/**
* 队列是否满了
*/
public boolean isFull(){
return end == queue.length;
}
二、链表实现队列
1、引入单向链表
地址:https://blog.csdn.net/yoonerloop/article/details/81489665
2、构造方法
class LinkedListQueue {
private SingleLinkedList listQueue;
public LinkedListQueue() {
listQueue = new SingleLinkedList();
}
}
3、添加队列
/**
* 插入元素
*/
public void add(String data) {
listQueue.insert(data);
}
4、删除队列
/**
* 删除元素
*/
public String delete(){
return listQueue.deleteHead().data;
}
5、查看队列
/**
* 查看队列
*/
public void display() {
listQueue.display();
}
6、查看对头
/**
* 获取队头
*/
public String getFront() {
return listQueue.getHead().data;
}
7、查看队尾
/**
* 获取队尾
*/
public String getEnd() {
return listQueue.getTail().data;
}
8、获取队列长度
/**
* 获取队列长度
*/
public int size() {
return listQueue.length();
}
9、队列是否为空
/**
* 队列是否为空
*/
public boolean isEmpty() {
return listQueue.isEmpty();
}
下一篇将介绍双端队列。