1. 程式人生 > >環形佇列——對int型別的資料進行操作

環形佇列——對int型別的資料進行操作

#ifndef MYQUEUE_H
#define MYQUEUQ_H
class MyQueue
{
public:
	MyQueue(int queueCapacity);   //InitQueue(&Q)  建立佇列
	virtual ~MyQueue();           //DestroyQueue(&Q) 銷燬佇列
	void CleanQueue();            //CleanQueue(&Q)清空佇列
	bool QueueEmpty() const;      //QueueEmpty(Q) 判空佇列
	bool QueueFull() const;       //QueueFull()判滿佇列
	int QueueLength() const;      //QueueLength(Q)佇列長度
	bool EnQueue(int element);    //EnQueue(&Q element)  新元素入隊
	bool DeQueue(int &element);   //DeQueue(&Q &element) 首元素出隊
	void QueueTraverse();         //QueueTraverse(Q visit()) 遍歷佇列
private:
	int *m_pQueue;                //佇列陣列指標
	int m_iQueueLen;              //佇列元素個數
	int m_iQueueCapacity;         //佇列陣列容量
	int m_iHead;                  //隊頭
	int m_iTail;                   //隊尾
};
#endif// MYQUEUE_H#include
#include
#include "MyQueue.h"
using namespace std;

MyQueue::MyQueue(int queueCapacity)
{
	m_iQueueCapacity=queueCapacity;
	m_pQueue=new int[m_iQueueCapacity];
	CleanQueue();
}

MyQueue::~MyQueue()
{
	delete[] m_pQueue;
	m_pQueue =NULL;
}

void MyQueue::CleanQueue()
{
	m_iHead=0;
	m_iTail=0;
	m_iQueueLen=0;
}

bool MyQueue::QueueEmpty() const
{
	if(m_iQueueLen==0)
	{
		return true;
	}
	else
	{
		return false;
	}
	/*return m_iQueueLen == 0 ? true : false;*/
}

int MyQueue::QueueLength() const
{
	return m_iQueueLen;
}

bool MyQueue::QueueFull() const
{
	if(m_iQueueLen==m_iQueueCapacity)
	{
		return true;
	}
	else
	{
		return false;
	}
}

bool MyQueue::EnQueue(int element)
{
	if(QueueFull())
	{
		return false;
	}else
	{
		m_pQueue[m_iTail]=element;
		m_iTail++;
		m_iTail=m_iTail%m_iQueueCapacity;
		m_iQueueLen++;
		return true;
	}
}

bool MyQueue::DeQueue(int &element)
{
	if(QueueEmpty())
	{
		return false;
	}
	else
	{
		element=m_pQueue[m_iHead];
		m_iHead++;
		m_iHead=m_iHead%m_iQueueCapacity;
		m_iQueueLen--;
		return true;
	}
}
void MyQueue::QueueTraverse()
{
	cout<
#include
#include"MyQueue.h"
using namespace std;
int main(void)
{
	MyQueue *p=new MyQueue(4);
	p->EnQueue(10);
	p->EnQueue(12);
	p->EnQueue(16);
	p->EnQueue(18);
	p->QueueTraverse();

	int e=0;
	p->DeQueue(e);
	cout<DeQueue(e);
	cout<QueueTraverse();

	p->CleanQueue();
	p->QueueTraverse();

	p->EnQueue(20);
	p->EnQueue(30);
	p->QueueTraverse();


	delete p;
	p=NULL;
	system("pause");
	return 0;
}

以上內容來源於慕課網。