队列的介绍
队列就是一种先进先出的数据结构
例如 排队打饭
我们依旧采用数组实现队列。
不管用什么实现,重要的是什么? 当然是要理解他的思想啊!!!!!!
- 队列的基本操作就是 入队 出队 他需要两个指针哦,一个指向队头 ,一个指向队尾。
- 以及队列的大小。
上代码(一步一步来)后面有完整代码。。。。
先定义队列 做准备工作
说明一点 : 头指针要比尾指针快一步,因为如果判空的时候,我们会写 fitst == end ,但是假设这样一种情况,就是 当两个头尾指针都为0的情况下。此时栈里还有一个数字,但是根据我们的逻辑 却是空的。
private Object[] queue; // 定义数组
private int maxSize; // 队列大小
private int fist; // 指向队头的指针
private int end; // 指向队尾的指针
public MyQueue() {
}
// 构造器来初始化
public MyQueue(int maxSize) {
this.maxSize = maxSize;
queue = new Object[maxSize];
this.fist = 0;
this.end = -1;// end始终慢first一步(灾难始终慢我一步(狗头))
}
我们判断队列为空的情况
// isEmpty ?
public boolean isEmpty() {
return fist == end - 1; // so,判空的时候记得给end-1 就ok啦。
}
我们判断队列满的情况
兄台,坚持一下,看完好吧…,要学习,要努力,不要懈怠。干掉自己
哦?不对,是干掉困难,我们的目标就是充实自己(搞钱)!!!
// isFull
public boolean isFull() {
return end == maxSize - 1; // 这没啥说的吧。。。。
}
入队 (入队?入什么队?当然是党的队伍啦!)
同志,信仰不动摇,你是NO.1!
OK ,Go on 吧
// add
public void add(E element) throws Exception {
if (isFull()) {
System.out.println("队列满了.................."); // 我抛异常,你们大可不抛,注解sout输出即可。重点是什么?理解思想好吧。。。
return ;
}
queue[++end] = element; // 入队,加一
}
出队 (这可不是出党队伍啊。。狗头)
出队这里有个问题,就是说,我们出队是队头出对吧,按理说是frist++一下,但是就会到最后,本来是5个队列大小的空间,最后一个都放不了。 因为后面的元素没往前移动,每次出队就浪费前一个空间。所以我们就把元素向前移动一下。
// remove
public E remove() throws Exception {
if(isEmpty()) {
throw new Exception("队列为空...........");
}
E data = (E) queue[fist];
for (int i = fist; i < end; i++) {
queue[i] = queue[i+1];
}
end--;
return data;
}
完整代码
package com.my.Queue;
/**
* @description: 队列的基本操作 入队 出队
**/
public class MyQueue<E> {
private Object[] queue;
private int maxSize;
private int fist;
private int end;
public MyQueue() {
}
public MyQueue(int maxSize) {
this.maxSize = maxSize;
queue = new Object[maxSize];
this.fist = 0;
this.end = -1;
}
// isFull
public boolean isFull() {
return end == maxSize - 1;
}
// isEmpty
public boolean isEmpty() {
return fist - 1 == end;
}
// add
public void add(E element) throws Exception {
if (isFull()) {
System.out.println("队列满了..................");
return ;
}
queue[++end] = element;
}
// remove
public E remove() throws Exception {
if(isEmpty()) {
throw new Exception("队列为空...........");
}
E data = (E) queue[fist];
for (int i = fist; i < end; i++) {
queue[i] = queue[i+1];
}
end--;
return data;
}
// print queue
public void print() {
if(isEmpty()) {
System.out.println("队列空...........");
}
for (int i = fist; i <= end; i++) {
System.out.print(queue[i]+" ");
}
System.out.println();
}
}