顺序循环队列的实现
写在前面
队列(Queue)是一种特殊的线性表,是一种只允许在表的一端进行插入操作,在表的另一端进行删除操作的线性表。表中允许进行插入操作的一端称为队尾,允许进行删除操作的一端为队头。队头和队尾分别由队头指示器和队尾指示器指示。队列的插入操作通常称为入队,队列的删除操作通常称为出队。当队列中没有元素时,为空队列。
根据队列的定义,每次进队列的数据元素都放在原来的队尾之后成为新的队尾元素,每次出队列得到数据元素都是原来的队头元素。这样,最先入队的数据元素总是最先出队,所以队列也被称为先进先出表。
对队列的操作主要有:初始化建立队列、入队列、出队列、取队头元素、判断队列是否为空等操作。
1.顺序队列的类定义
const int maxsize = 10;
template<class T>
class Queue
{
public:
Queue();//构造函数
~Queue() {};//析构函数
void insert(const T&item);//入队
T delet();//出队列
T readFront() const;//读队头元素
bool empty() const;//判断队列是否为空
void clearQueue();//清空队列
int getsize() const;//获取队列长度
void display() const;//输出队列中的元素
private:
T data[maxsize];
int front;
int rear;
int count;
};
2.顺序队列类的实现
template<class T>
inline Queue<T>::Queue()
{
front = 0;
rear = 0;
count = 0;
}
template<class T>
inline void Queue<T>::insert(const T & item)
{
if (count == maxsize)
{
cout << "Queue is full" << endl;
exit(1);
}
count++;
data[rear] = item;
rear = ((rear + 1) == maxsize) ? 0 : (rear + 1);
}
template<class T>
inline T Queue<T>::delet()
{
if (count<=0)
{
cout << "Queue is empty" << endl;
}
count--;
T p = data[front];
front = ((front + 1) == maxsize) ? 0 : (front + 1);
return p;
}
template<class T>
inline T Queue<T>::readFront() const
{
return data[front];
}
template<class T>
inline bool Queue<T>::empty() const
{
return (count == 0);
}
template<class T>
inline void Queue<T>::clearQueue()
{
count = 0;
front = rear = 0;
}
template<class T>
inline int Queue<T>::getsize() const
{
return count;
}
template<class T>
inline void Queue<T>::display() const
{
int i = 0;
while (i != count)
{
cout << i << "号元素:" << data[i] << endl;
i++;
}
}
3.测试主函数
void test()
{
Queue<int> queue;
for (int i = 0; i < 10; i++)
{
queue.insert(i);
}
cout <<"队列的长度为:"<< queue.getsize() << endl;
queue.display();
cout <<"队头元素为:"<< queue.readFront() << endl;
cout << "元素:"<<queue.delet()<<"已删除" << endl;
}
int main()
{
test();
system("pause");
return EXIT_SUCCESS;
}
输出结果如下: