如果是自定义类型的数组,推荐使用java自带的工具类:Comparable接口,并重写CompareTo()方法。或者Compartor。
1.1. 队列的数据结构队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
1.2. Java实现
QueueTest
package ch04
public class QueueTest {
public static void main(String[] args) {
ArrayQueue queue = new ArrayQueue(10)
System.out.println(queue.isEmpty())
for (int i = 0i <10i++) {
queue.insert(i)
}
System.out.println(queue.isFull())
while (!queue.isEmpty()) {
System.out.println(queue.remove())
}
}
}
class ArrayQueue {
private int[] arrInt// 内置数组
private int front// 头指针
private int rear// 尾指针
public ArrayQueue(int size) {
this.arrInt = new int[size]
front = 0
rear = -1
}
/**
* 判断队列是否为空
*
* @return
*/
public boolean isEmpty() {
return front == arrInt.length
}
/**
* 判断队列是否已满
*
* @return
*/
public boolean isFull() {
return arrInt.length - 1 == rear
}
/**
* 向队列的队尾插入一个元素
*/
public void insert(int item) {
if (isFull()) {
throw new RuntimeException("队列已满")
}
arrInt[++rear] = item
}
/**
* 获得对头元素
*
* @return
*/
public int peekFront() {
return arrInt[front]
}
/**
* 获得队尾元素
*
* @return
*/
public int peekRear() {
return arrInt[rear]
}
/**
* 从队列的对头移除一个元素
*
* @return
*/
public int remove() {
if (isEmpty()) {
throw new RuntimeException("队列为空")
}
return arrInt[front++]
}
}
运行结果如下:
false
true
0
1
2
3
4
5
6
7
8
9
这个涉及到编译原理的问题,我只能说,这是一个编译规范。在规范中比如:int[],中的int告诉计算机这是一个整型数据,[]告诉计算机这是一个连续存储的内存地址空间,简单点说一个连续数据的存储空间就是数组,数组只是一个名称!!当然我只是简略的这样说,实际上数组是很复杂的!!