这是用JAVA实现队列的顺序存储结构和操作,有兴趣的可以看看。
先定义方法接口:
package com.guobing.queue;
public interface Queue_Interface {
public void init(); //初始化队列
public void enter(Object obj); //入队列
public Object leave(); //出对列
public Object peek(); //返回队列的首元素
boolean isEmpty(); //判断队列是否为空
public void clear(); //清空队列
public void print(); //打印队列
}
实现:
package com.guobing.queue;
/**
* 功能:对列的顺序存储结构和操作实现
* @author guobing
*
*/
public class Queue implements Queue_Interface{
/**
* 定义对列的必要变量
*/
final int minSize = 14;
private Object [] queueArray; //存储对列的数组引用
private int front, rear; //定义对列的尾指针和手指针
/**
* 清空队列
*/
@Override
public void clear() {
front = rear = 0;
}
/**
* 向对列中插入元素
*/
@Override
public void enter(Object obj) {
if(rear + 1 % queueArray.length == front) { //当对列为满时
Object[] p = new Object[queueArray.length * 2];
if(rear == queueArray.length - 1) { //如果尾指针是数组的最后一位
for(int i = 1; i <= rear; i++) { //复制到新的数组
p[i] = queueArray[i];
}
}else { //已经有循环时
int i, j=1;
for(i=front + 1; i<queueArray.length; i++,j++)
p[j] = queueArray[i]; //复制后半部分
for(i=0; i<=rear; i++, j++) //复制前半部分
p[j] = queueArray[i];
front = 0; //在新数组上给front rear赋值
rear = queueArray.length - 1;
}
/*p[0] = queueArray[front];*/
queueArray = p;
}
rear = (rear+1) % queueArray.length; //尾指针加1 为了入对列
queueArray[rear] = obj; //入对列
}
/**
* 初始化对列
*/
@Override
public void init() {
front = rear = 0;
queueArray = new Object[minSize];
}
/**
* 判断对列是否为空
*/
@Override
public boolean isEmpty() {
return front == rear;
}
/**
* 出对列
*/
@Override
public Object leave() {
if(front == rear)
return null;
front = (front + 1) % queueArray.length; //因为对列front为空
System.out.println("首元素出队列:" + queueArray[front]);
return queueArray[front]; //所以返回的就是个值
}
/**
* 返回对列首元素的值
*/
@Override
public Object peek() {
if(front == rear)
return null;
return queueArray[(front + 1) % queueArray.length];
}
public static void main(String [] args) {
Queue qu = new Queue();
qu.init();
qu.enter("a");
qu.enter("b");
qu.enter("c");
qu.enter("d");
qu.enter("e");
qu.enter("f");
qu.enter("g");
qu.enter("h");
qu.enter("i");
qu.print();
System.out.println("队列中首元素是:" + qu.peek());
if(!qu.isEmpty()) {
qu.leave();
qu.print();
System.out.println("队列中首元素是:" + qu.peek());
}
}
/**
* 打印对列中的元素
* 这只是测试最简单的一种情况,即队列没有满。鉴于时间关系完整的打印就不写了
*/
@Override
public void print() {
for(int i = front + 1; i <= rear % queueArray.length; i++) {
System.out.print(queueArray[i] + " ");
}
}
}
测试结果:
a b c d e f g h i 队列中首元素是:a
首元素出队列:a
b c d e f g h i 队列中首元素是:b
终于写完了,有什么疑问可以共同讨论。