class MyQueue{
public:
MyQueue(int queueCapacity); //创建队列
virtual ~MyQueue(); //销毁队列
void ClearQueue(); //清空队列
bool QueueEmpty() const; //判空队列
int QueueLength() const; //队列长度
bool EnQueue(int element); //新元素入队
bool DeQueue(int &element); //首元素出队
void QueueTraverse(); //遍历队列
private:
int *m_pQueue; //队列数组指针
int m_iQueueLen; //队列元素个数
int m_iQueueCapacity; //队列数组容量
};
MyQueue.cpp
⑥bool EnQueue(int element);
⑦bool DeQueue(int& element);
⑧void QueueTraverse();
例:仅具有4个元素的环形队列。
(1)MyQueue.h
(2)MyQueue.cpp
①成员函数/构造函数
MyQueue(int queueCapacity);
②成员函数/虚析构函数
virtual ~MyQueue();
③void ClearQueue();
④bool QueueEmpty() const;
⑤int QueueLength() const;
//环形队列C++实现
MyQueue.h
*Array
first in first out ---FIFO 队列
普通队列:有队列头 队列尾
环形队列:好处是屏蔽了普通队列的缺点。也有队列头和队列尾。排队有逆时针和顺时针。充分利用每一个内存空间。
用途:自动排号机。
排号?
环形队列
FIFO 先入先出
QUEUE2
myQueue
环形队列的优势在于其队列的头可以随着成员的弹出而不断的后移,由此,队列空间可以得到有效的利用。
队列:分为普通队列和环形队列
普通队列:资源浪费和效率慢
环形队列:弥补普通队列的缺点
环形队列C++
充分利用每一个内存空间
速度较慢.
first in first out
数据结构.
FIFO:first in first out,先进先出
队列的形式:普通队列,环形队列(这里考虑数组的形式存储队列元素)
如果是用普通队列,如果是固定队列头,会浪费时间,如果是移动队列头指针,则会浪费内存;
如果是用环形队列,则有存储空间大小的限制。
环形队列的设计:
队列:
先进先出(FIFO:first in first out)
队头、队尾
普通队列、环形队列
for (int i = 0; i < m_iQueueLen; i++) { cout << m_pQueue[(m_iHead + i) % m_iQueueCapacity] << endl; // //这里的i是要与总容量取余 } 或者: for (int i = m_iHead ; i < m_iQueueLen+m_iHead ; i++) { cout << m_pQueue[ i % m_iQueueCapacity] << endl; //这里的i是要与总容量取余 }
这里遍历是有问题的,循环应该这么写。 这里用取余符号%来解决下标超出范围的问题,很机智
数据结构指相互之间存在一种或多种[特定关系]的数据元素的[集合]。
对复杂的数据类型做环形队列:
未做笔记,后期补
之前的遍历函数有点问题,修改:
环形队列三个函数:新元素入队、首元素出队、遍历队列实现:
新元素入队:先判断是否未满。
上图错误:
未加m_iQueueLen++;
m_iTail = m_iTail % m_iQueueCapacity;
出队:出队的是队头指向的元素。出队先判断队是否为空。
下图错误:
未加m_iQueueLen—;
m_iHead= m_iHead % m_iQueueCapacity;
遍历,注意对i取余的原理。
编写cpp文件:
队尾的位置就是插入数据的位置,第一个插入的数据放在queue[0],开始队首和队尾都是queue[0],插入一个数据后,队尾的位置变为queue[1]。
取第一个数从queue[0]开始取,后对头指向queue[1].
队列:先入先出FIFO
普通队列、环形队列
队列的用途:自动排号机