主要的功能:1)循环队列的初始化
2)求循环队列的长度
3)循环队列的插入删除操作
4) 判断循环队列是否为空,是否已经满了
5)遍历循环队列
主要的原理:
1)初始化 front = rear = 0;
2)为空 front = rear
3)已满 front=(rear+1)%size
4) 插入 rear = (rear+1)%size
5)删除 front=(front+1)%size
代码如下:
/****************************************************************************
author---bigship
date----2014.10.24
*****************************************************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
using namespace std;
const int Size = 100;//循环队列的大小
template <class T>
struct Queue
{
T *base;
int front;
int rear;
void init(){//初始化队列
base = (T *)malloc(sizeof(T)*Size);
front=rear=0;
}
bool empty(){//判断队列是否为空
if(front==rear)
return true;
return false;
}
bool full(){//判断是否已经满了
if((rear+1)%Size==rear)
return true;
return false;
}
void push(T x){//插入元素
if(full()){
printf("The queue is full\n");
return ;
}
base[rear] = x;
rear = (rear + 1)%Size;
}
void pop(){//删除队首元素
if(empty()){
printf("The queue is empty\n");
return ;
}
front=(front+1)%Size;
}
T top(){//返回队首元素
return base[front];
}
int length(){//队列长度
return (rear-front+Size)%Size;
}
void destroy(){//销毁队列
if(base) free(base);
base = NULL;
rear=front;
}
void visit(){//遍历队列
if(empty()){
printf("the queue is empty");
return ;
}
int tmp = front;
while(tmp!=rear){
printf("%d ",base[tmp]);
tmp=(tmp+1)%Size;
}
puts("");
}
};
int main()
{
Queue<int > q;
q.init();
for(int i=0;i<20;i++)
q.push(i);
printf("top %d\n",q.top());
printf("length %d\n",q.length());
q.push(21);
printf("length %d\n",q.length());
q.visit();
q.pop();
printf("top %d\n",q.top());
q.visit();
q.destroy();
q.visit();
return 0;
}