1.队列:只允许在表的一端插入,在表的另外一端进行删除的线性表。特定是先进先出。
2.顺序队列:由一个存放队列元素的一维数组,以及分别指示队头和队尾的指针所组成。队尾指针指示队尾元素在一维数组中的当前位置,队头指针指示队头元素在一维数组中的当前位置的前一个位置。
3.循环队列的算法实现
package com.bocloud.queue;
/**
* 操作队列的接口
*
* @author dongkai
*
*/
public interface QueueIntf {
/**
* 数据如队列操作
*
* @param object
*/
public void enQueue(int x);
/**
* 数据出队列操作
*
* @return
*/
public int delQueue();
/**
* 返回当前队列中的元素个数
*
* @return
*/
public int size();
/**
* 清空队列
*/
public void clear();
/**
* 判断队列是否为空
*
* @return
*/
public boolean isEmpty();
/**
* 读取队列的首元素
*
* @return
*/
public int head();
}
package com.bocloud.queue;
/**
* 循环队列操作接口实现
*
* @author dongkai
*
*/
public class Cqueuetp implements QueueIntf {
public final int maxsize = 100;// 队列的最大长度
public int elem[] = new int[maxsize];
public int front, rear;
public Cqueuetp() {
front = 0;
rear = 0;
}
@Override
public void enQueue(int x) {
if ((rear + 1) % maxsize == front) {
System.out.println("Overflow");
} else {
rear = (rear + 1) % maxsize;
elem[rear] = x;
}
}
@Override
public int delQueue() {
if (rear == front) {
return 0;
} else {
front = (front + 1) % maxsize;
return (elem[front]);
}
}
@Override
public int size() {
return ((maxsize + rear - front) % maxsize);
}
@Override
public void clear() {
}
@Override
public boolean isEmpty() {
if (rear == front) {
return true;
}
return false;
}
@Override
public int head() {
if (rear == front) {
return 0;
} else {
return (elem[(front + 1) % maxsize]);
}
}
}