C++(循环)队列的实现

//queue.h
class Queue
{
public:
	Queue();
	~Queue();
	bool InQuene(int element);//入队
	bool OutQuene();//出队
	void PrintQuene();
	bool EmptyprintQuene();
private:
	int *data;  //数据数组
	int front;  //队首
	int rear;   //队尾
	int MAX;    //队列长度
};

#include<iostream>
#include"queue.h"
using namespace std;

Queue::Queue()
{
	int maxsize;
	cout << "请输入队列的长度:";
	cin >> maxsize;
	data = new int[maxsize+1];//队列从front+1到rear,也就是说front不包含,rear包含
	front = 0;
	rear = 0;
	MAX = maxsize;
}

Queue::~Queue()
{
	delete data;
}

bool Queue::InQuene(int element)
{
	if (((rear + 1) % (MAX+1)) == front)//循环队列上溢出
	{
		cout << "队列已满,无法入队" <<endl;
		return false;
	}
	
	rear = (rear + 1) % (MAX + 1);
	data[rear] = element;
	cout << "元素" << data[rear] << "入队!" << endl;;
}

bool Queue::OutQuene()
{
	if (EmptyprintQuene())
	{
		cout << "队列为空,无法出队!" << endl;
		return false;
	}
	front = (front + 1) % (MAX + 1);
	
	cout << "元素" << data[front] << "出队!"<<endl;
}

void Queue::PrintQuene()
{
	int temp = front;
	if (EmptyprintQuene())
	{
		cout << "队列元素为: 队列为空!" <<endl;
		return;
	}
	cout << "队列元素为: ";
	temp = (temp + 1) % (MAX + 1);
	while (temp!=rear)
	{
		cout << data[temp] << " ";
		temp = (temp + 1) % (MAX + 1);
	}
	cout << data[temp] << endl;
}

bool Queue::EmptyprintQuene()
{
	return front==rear;
}

int main()
{
	Queue q;
	q.InQuene(1);
	q.InQuene(2);
	q.InQuene(3);
	q.InQuene(4);

	q.PrintQuene();
	q.OutQuene();
	q.PrintQuene();
	q.OutQuene();
	q.PrintQuene();
	q.OutQuene();
	q.PrintQuene();
	q.OutQuene();

	q.InQuene(4);
	q.InQuene(5);
	q.InQuene(6);
	q.PrintQuene();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/h294455907/article/details/80237753