循环队列的数组实现-C++
template<typename T, int size = 100>
class ArrayQueue{
private:
int first, last;
T storage[size];
public:
ArrayQueue(){
first = last = -1;
}
void enqueue(T);
T dequeue();
bool isFull(){
return first == 0 && last == size - 1 || first == last + 1;
}
bool isEmpty(){
return first == -1;
}
};
template<typename T, int size>
void ArrayQueue<T, size>::enqueue(T el){
if(!isFull){
if(last == size - 1 || last == -1){ // 最后一个元素在数组末端或刚开始为空时
storage[0] = el;
last = 0;
if(first == -1) // 刚开始为空时
first = 0;
}
else
storage[++last] = el;
}
else
cout<< "Full Queue.\n";
}
template<typename T, int size>
T ArrayQueue<T, size>::dequeue(){
if(!isEmpty){
T tmp = storage[first];
if(first == last)
last = first = -1;
else if(first == size - 1)
first = 0;
else
first++;
return tmp;
}
else
cout<<"Queue is empty. \n"
}
循环队列C语言实现
typedef int typename;
#define maxSize 20
typedef struct{
typename elem[maxSize];
int front, rear;
}CircQueue;
//初始化队列
void initQueue(CircQueue& q){
q.front = q.rear = 0;
}
//入队,rear指示了实际队尾的后一位置,即下一个元素应当加入的位置
void enqueue(CircQueue& q, typename x){
if(isFull()){ //判断队列是否满
printf("queue is full\n");
return;
}
q.elem[q.rear] = x;
q.rear = (q.rear + 1) % maxSize; //队尾指针进1
}
//出队,先把front所指位置元素记录下来,再让其进1
typename dequeue(CircQueue& q){
if(isEmpty()){
printf("queue is empty\n");
return;
}
typename x;
x = q.elem[q.front];
q.front = (q.front + 1) % maxSize;
return x;
}
//判断队列是否为满
bool isFull(CircQueue& q){
return (q.rear + 1) % maxSize == q.front;
}
//判断队列是否为空
bool isEmpty(CircQueue& q){
return q.front == q.rear;
}
参考:数据结构(c语言版)第2版 殷人昆编著