顺序队列(循环队列)

顺序队列

一、实验目的

熟悉并实现顺序队列的操作

二、实验步骤

#include
using namespace std;

const int QueueSize = 100;
template
class CirQueue
{
public:
	CirQueue() { front = rear = QueueSize - 1; }
	~CirQueue() {};
	void EnQueue(DataType x);
	DataType DeQueue();
	DataType GetQueue();
	int Empty() (){
		if (front == rear)
		{
			return 1;
		}
		else {
			return 0;
		}

private:
	DataType data[QueueSize];
	int front;
	int rear;
};

///入队
template
void CirQueue::EnQueue(DataType x)
{
	if ((rear + 1) % QueueSize == front)throw"上溢";
	else {
		rear = (rear + 1) % QueueSize;
		data[rear] = x;
	}
}

///出队
template
DataType CirQueue::DeQueue()
{
	if (rear == front)throw"下溢";
	else {
		front = (front + 1) % QueueSize;
		return data[front];
	}
}

///读取队头元素
template 
DataType CirQueue::GetQueue()
{
	if (rear == front)throw"下溢";
	else {
		int i = (front + 1) % QueueSize;
		return data[i];
	}
}


template 
void main()
{
	LinkQueueQ;       //创建模板类的实例
	if (Q.Empty())
		cout << "队列为空" << endl;
	else
		cout << "队列非空" << endl;
	cout << "元素10和15执行入队操作:" << endl;
	try
	{
		Q.EnQueue(10);   //入队操作
		Q.EnQueue(15);
	}
	catch (char*wrong)
	{
		cout << wrong << endl;
	}
	cout << "查看队头元素:" << endl;
	cout << Q.GetQueue() << endl;     //读队头元素
	cout << "执行出队操作:" << endl; //出队操作
	try
	{
		Q.DeQueue();
	}
	catch (char*wrong)
	{
		cout << wrong << endl;
	}
	cout << "查看队头元素:" << endl;
	cout << Q.GetQueue() << endl;
}

三、实验结果

顺序队列(循环队列)_第1张图片


四、实验心得

   顺序队列判断队空的条件是:对头指针=队尾指针;浪费一个存储单元的情况下,队满的判定条件是:(队尾指针+1)%数组长度=对头指针。实现操作的过程耗时太长,要熟练,多加练习。

 

你可能感兴趣的:(顺序队列(循环队列))