循環隊列(附分析圖)

循環隊列

列表屬性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;
}

謝謝大家的瀏覽。剛開始寫博客,以後文檔會越做越好的。加油

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章