数据结构和算法--顺序循环队列(C++实现)

把队列这种头尾相接的顺序存储结构称为循环队列

front:指向对头元素的位置
rear:指向队尾元素的下一个位置
对列满的条件:(real + 1) % QueueSize == front
当对满时,数组中还有一个空闲的元素。
队列长度(rear - front + QueueSize) % QueueSize

#include <iostream>

const unsigned MAX_SIZE = 10;

template<typename T>
class CycleQueue
{
public:
	CycleQueue();
	~CycleQueue();

	void mvPop();               // 出队
	void mvPush(const T& d);    // 入队
	bool mbIsFull() { return (((miRear + 1) % MAX_SIZE) == miFront); }
	int miGetSize() { return ((miRear - miFront + MAX_SIZE) % MAX_SIZE); }

private:
	unsigned miFront;     // 队头索引
	unsigned miRear;      // 队尾索引  
	T* mopData;
};

template<typename T>
CycleQueue<T>::CycleQueue() : miFront(0), miRear(0)
{
	mopData = new T[MAX_SIZE];
}

template<typename T>
CycleQueue<T>::~CycleQueue()
{
	if (mopData != nullptr) {
		delete [] mopData;
	}
}

template<typename T>
void CycleQueue<T>::mvPop()
{
	if (miFront == miRear) {
		std::cout << "Pop Error : Cycle Queue is Empty!" << std::endl;
		return;
	}

	// 队头索引向后移一位置,若到最后则转到数组头部
	miFront = (miFront + 1) % MAX_SIZE;
}

template<typename T>
void CycleQueue<T>::mvPush(const T& d)
{
	// 判断队满
	if (((miRear + 1) % MAX_SIZE) == miFront) {
		std::cout << "Push Error : Cycle Queue is Full!" << std::endl;
		return;
	}

	//将元素d赋值给队尾
	mopData[miRear] = d;

	// 队尾索引向后移一位置,若到最后则转到数组头部
	miRear = (miRear + 1) % MAX_SIZE;
}

int main()
{
	CycleQueue<int> cq;
	cq.mvPush(1);
	cq.mvPop();

	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值