以下内容源于慕课网的学习整理,如有侵权,请告知删除。
1、队列
- 特点:先进先出(FIFO)
- 常用的场景
广度优先搜索 - 类型
- 普通队列
- 环形队列
队列是一个环
2、环形队列的实现举例
MyQueue.h
//在MyQueue.h文件中
#ifndef MYQUEUE_H
#define MYQUEUE_H
/******************************************/
/*环形队列C++实现 2018-7-24 by Excalibur*/
/******************************************/
class MyQueue
{
public:
MyQueue(int queueCapacity); //创建队列
virtual ~MyQueue(); //销毁队列
void ClearQueue(); //清空队列
bool QueueEmpty() const; //判队空
bool QueueFull() const; //判队满
int QueueLength() const; //队列长度
bool EnQueue(int element); //元素入队
bool DeQueue(int &element); //元素出队
void QueueTraverse(); //遍历队列
private:
int *m_pQueue; //队列数组指针
int m_iQueueLen; //队列元素个数
int m_iQueueCapacity; //队列数组容量
int m_iHead;
int m_iTail;
};
#endif // !MYQUEUE_H
MyQueue.cpp
//在MyQueue.cpp文件中
#include "MyQueue.h"
#include <iostream>
using namespace std;
MyQueue::MyQueue(int queueCapacity)
{
m_iQueueCapacity = queueCapacity;
m_iHead = 0;
m_iTail = 0;
m_iQueueLen = 0;
m_pQueue = new int[m_iQueueCapacity];//在堆中分配
}
MyQueue::~MyQueue()
{
delete[] m_pQueue;
m_pQueue = NULL;
}
void MyQueue::ClearQueue()
{
m_iHead = 0;
m_iTail = 0;
m_iQueueLen = 0;
}
bool MyQueue::QueueEmpty() const
{
/*if (m_iQueueLen == 0)
return true;
else
return false;*/
//Ctrl+k Ctrl+c -> 快速注释; Ctrl+k Ctrl+u -> 快速注释;
return m_iQueueLen == 0 ? true : false;
}
bool MyQueue::QueueFull() const
{
return m_iQueueCapacity == m_iQueueLen ? true : false;
}
int MyQueue::QueueLength() const
{
return m_iQueueLen;
}
bool MyQueue::EnQueue(int element) //元素入队
{
if (QueueFull())
{
return false;
}
else
{
m_pQueue[m_iTail] = element;
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_iQueueCapacity;
m_iQueueLen--;
return true;
}
}
void MyQueue::QueueTraverse() //遍历队列
{
for (int i = m_iHead; i < m_iQueueLen+m_iHead; i++)
{
cout << m_pQueue[i%m_iQueueCapacity] << endl;
}
}
demo.cpp
//在demo.cpp文件中
#include <iostream>
#include <stdlib.h>
#include "MyQueue.h"
using namespace std;
int main()
{
MyQueue *queue = new MyQueue(4);
queue->EnQueue(10);
queue->EnQueue(5);
queue->QueueTraverse();
int e = 0;
queue->DeQueue(e);
queue->QueueTraverse();
queue->EnQueue(8);
queue->QueueTraverse();
queue->ClearQueue();
queue->EnQueue(10);
queue->QueueTraverse();
delete queue;
queue = NULL;
return 0;
}