您的位置:首页 > 编程语言 > C语言/C++

顺序队列的c++实现

2015-06-17 22:11 316 查看
顺序队列的初始化及对队列的操作保存在queue.h中

#ifndef QUEUE_H
#define QUEUE_H
template <class T>
class Queue
{
public:
Queue(int  queuecapacity);
bool Isempty();
void Front();
void Rear();
void Push(T item);
void Pop();
private:
T *queue;
int front;
int rear;
int capacity;
};

//利用构造函数初始化顺序队列
template <class T>
Queue<T>::Queue(int  queuecapacity)
{
if( queuecapacity<1)
{
throw "the capacity of queue must be >0";
}
else
{
queue=new T[queuecapacity];
capacity=queuecapacity;
front=rear=0;  //牺牲front这个位置,这个位置不放元素
}

}

//元素进队列
template <class T>
void Queue<T>::Push(T item)
{
if((rear+1)%capacity==front)
{
throw "the queue is full";
}
else
{
rear=(rear+1)%capacity;
queue[rear]=item;
}
}

//出列
template <class T>
void Queue<T>::Pop()
{
if(Isempty()) throw "the queue is empty";
front=(front+1)%capacity;
}

//判断队列是否为空
template <class T>
inline bool Queue<T>::Isempty()
{
return front==rear;
}

//队首元素
template <class T>
inline void Queue<T>::Front()
{
if(!Isempty())
{
cout<<"队首元素为"<< queue[(front+1)%capacity]<<endl;
}
else
{
cout<< "the queue is empty"<<endl;
}
}

//队尾元素
template <class T>
inline void Queue<T>::Rear()
{
if(!Isempty())
{
cout<<"队尾元素为"<< queue[rear]<<endl;
}
else
{
cout<< "the queue is empty"<<endl;
}
}
#endif


主函数

#include "queue.h"
#include<iostream>
using namespace std;
int main()
{
Queue<int> q(10);
q.Push(1);
q.Push(2);
q.Push(3);
q.Front();
q.Rear();

q.Pop();
q.Pop();
q.Pop();
q.Front();
q.Rear();

q.Push(4);
q.Front();
q.Rear();

system("pause");
return 0;
}


结果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: