队列简介
- 像栈一样,队列(queue)也是表。然而,使用队列时插入在一端进行而删除则在另一端进行。
数组实现队列
- 对于每一个队列数据结构,我们保留一个数组 Array 以及位置 front 和 rear,他们代表队列的两端。代码如下:
public class MyQueue<T> {
private ArrayList<T> arr;
private int font;
private int rear;
public MyQueue() {
font = 0;
rear = 0;
arr = new ArrayList<>();
}
boolean isEmpty() {
return font == rear;
}
int size() {
return rear = font;
}
T top() {
if (isEmpty()) {
return null;
}
return arr.get(font);
}
T getBack() {
if (isEmpty()) {
return null;
}
return arr.get(rear - 1);
}
void deTopQueue() {
if (rear > font) {
font++;
} else {
System.out.println("空队列");
}
}
void enQueue(T item){
arr.add(item);
rear++;
}
}
链表实现队列
- 通过链表来实现队列有更好的灵活性,与数组实现方法相比多了用来存储位置关系的指针空间。
public class MyQueue2<T> {
static class LNode<T> {
T data;
LNode<T> next;
}
private LNode<T> head;
private LNode<T> end;
public MyQueue2() {
head = end = null;
}
boolean isEmpty() {
return head == null;
}
int size() {
int size = 0;
LNode<T> tmp = head;
while (tmp != null) {
tmp = head.next;
size++;
}
return size;
}
void enQueue(T item) {
LNode<T> enNode = new LNode<>();
enNode.data = item;
enNode.next = null;
if (head == null) {
head = end = enNode;
} else {
end.next = enNode;
end = enNode;
}
}
void deQueue() {
if (head == null) {
System.out.println("队列为null");
} else {
head = head.next;
if (head == null) {
end = null;
}
}
}
T getTop() {
if (head == null) {
return null;
}
return head.data;
}
T getBack(){
if (end == null){
return null;
}
return end.data;
}
}