【c++】模拟实现顺序队列方法一

这是模拟实现顺序队列的第一种方法。

就是入队时队尾在不断后移,直到满,出队时队头不断后移,直到空。


如下如示例:

【c++】模拟实现顺序队列方法一_第1张图片

【c++】模拟实现顺序队列方法一_第2张图片

【c++】模拟实现顺序队列方法一_第3张图片

【c++】模拟实现顺序队列方法一_第4张图片


代码以及简单测试:

#include  // assert();
#include 
using namespace std;

// 头在不断变的顺序队列 (非循环队列)
template
class Queue
{
	
public:
	// 构造函数
	Queue(const size_t capacity = 10)
		:_rear(0)
		,_front(0)
		,_capacity(capacity)
	{
		_capacity = (_capacity >= 10) ? _capacity : 10; //最少分配十个元素的空间
		_array = new T[_capacity];
	}

	// 拷贝构造
	Queue(const Queue& queue)
	{
		_Copying(queue);
	}

	// 赋值运算符重载
	Queue& operator=(const Queue& queue)
	{
		if (this != &queue)
		{
			Queue tempQueue(queue);
			_Copying(tempQueue);
		}
		return *this;
	}

	// 入队
	void Push(const T&data)
	{
		assert(!Full());
		_array[_rear++] = data;
	}

	// 出队
	void Pop()
	{
		assert( !Empty() );
		_front++;
	}

	// 队头
	T& Front()
	{
		assert(!Empty());
		return _array[_front];
	}

	const T& Front()const
	{
		assert(!Empty());
		return _array[_front];
	}

	// 队尾
	T& Back()
	{
		assert(!Empty());
		return _array[_rear-1];
	}

	const T& Back()const
	{
		assert(!Empty());
		return _array[_rear-1];
	}

	// 当前队列中元素个数
	size_t Length()const
	{
		return _rear - _front;
	}

	// 析构函数
	~Queue()
	{
		if (NULL != _array )
		{
			delete[] _array; _array = NULL;
			_front = 0;
			_rear = 0;
			_capacity = 0;
		}
	}

	// 判断是否满
	bool Full()const
	{
		return _rear == _capacity;
	}

	// 判断是否为空
	bool Empty()const
	{
		return 0 == _rear;                                                                                                                                              _capacity;
	}

private:
	// 赋值和拷贝构造 调用
	void _Copying(const Queue& queue)
	{
		_array = new T[queue._capacity];
		_rear = queue._rear;
		_capacity = queue._capacity;
		_front = queue._front;

		for (size_t idx = _front; idx < _rear; ++idx )
		{
			_array[idx] = queue._array[idx];
		}
	}
private:
	T* _array; // 指向数据的数组
	size_t _rear; // 队尾
	size_t _front; // 对头
	size_t _capacity; // 队列容量
};


//  测试
void Test1()
{
	// 测试基本操作
	Queue queue1;
	queue1.Push(1);
	cout << "插入一个元素后:" < queue2;
// 	queue2.Push(1);
// 	queue2.Push(2);
// 	queue2.Push(3);
// 	queue2.Push(4);
// 	// Queue que_copy_q2(queue2);
// 
// 	Queue que_copy_q2;
// 	que_copy_q2 = queue2;
// 	cout << "queue2 :"<< endl;
// 	cout << "队头:" << queue2.Front() << "队尾:" <


1.测试基本操作 


【c++】模拟实现顺序队列方法一_第5张图片


2.测试拷贝和赋值运算

【c++】模拟实现顺序队列方法一_第6张图片


你可能感兴趣的:(C/C++,C/C++/数据结构)