循環隊列
列表屬性front始終指向第0個元素
新添加元素:(動態數組容量不夠的情況在下面)
刪除元素:
添加元素:(實現循環的功能)
動態擴容:
.h文件
class CircleQueue
{
private:
int m_front;
int m_size;//隊列的大小
int m_capaticy;
int * m_element;
private:
static const int DEFAULT_CAPACITY = 10;
private:
void ensurecapaticy(int capatity);
public:
CircleQueue();
~CircleQueue();
int size();
bool isEmpty();
void enQueue(int element);
int deQueue();
int front();
};
.cpp文件
#include "CircleQueue.h"
CircleQueue::CircleQueue()
{
this->m_element = new int[DEFAULT_CAPACITY];
//初始化
this->m_size = 0;
this->m_capaticy = DEFAULT_CAPACITY;
this->m_front = 0;
}
CircleQueue::~CircleQueue()
{
if (this->m_element != NULL)
{
delete this->m_element;
this->m_element = NULL;
}
}
int CircleQueue::size()
{
return this->m_size;
}
bool CircleQueue::isEmpty()
{
return this->m_size == 0;
}
void CircleQueue::enQueue(int element)
{
ensurecapaticy(this->m_size + 1);
this->m_element[(this->m_front + this->m_size)%this->m_capaticy] = element;
this->m_size++;
}
int CircleQueue::deQueue()
{
int frontelem = this->m_element[this->m_front];
//delete (this->m_element + this->m_front);//???
this->m_element[this->m_front] = NULL;
this->m_front = (this->m_front+1)%this->m_capaticy;
this->m_size--;
return frontelem;
}
int CircleQueue::front()
{
return this->m_element[this->m_front];
}
void CircleQueue::ensurecapaticy(int capatity)
{
int oldCapacity = this->m_capaticy;
if (oldCapacity >= capatity)
{
return;
}
//新容量
int newCapacity = oldCapacity + (oldCapacity >> 1);
int * newelement = new int[newCapacity];
for (int i = 0; i < this->m_size; i++)
{
newelement[i] = this->m_element[(i+this->m_front)%this->m_capaticy];
}
delete this->m_element;
this->m_element = newelement;
//重置
this->m_front = 0;
this->m_capaticy = newCapacity;
cout << "擴容了" << oldCapacity << "+" << newCapacity << endl;
}
謝謝大家的瀏覽。剛開始寫博客,以後文檔會越做越好的。加油