循环队列的C++实现以及假溢出的解决方法

本文介绍了循环队列的C++实现,讨论了如何解决假溢出问题,包括将数组视为循环结构来避免假溢出,以及通过少用一个元素空间来判断队列状态的方法。文章采用第二种方法,即利用一个特殊位置来判断队列是否为空,并详细说明了操作流程。
摘要由CSDN通过智能技术生成

在上篇《队列的C++实现》中已经介绍了一种假溢出的解决方案:当数据出队时,将数据整体向前移动,这样就会不会出现假溢出。

另一种方案是:将数组看成循环的,这样的话,即使尾端数据已经塞满,但是由于结构是循环的,可以继续将队头的空位当作队头插入数据,从而解决假溢出。

如何判断队列是空还是满?有俩种方法:1.设置标志位,当插入数据之后遇到top==end,标志队列是满,flag=1;如果删除数据遇到top==end,标志队列是空,flag=0。

2.少用一个元素空间,令top,end都指向这个位置,只要判断end==top就可以知道队列是否为空,插入数据或者删除数据要忽略这个位置点,因为这个数据点不能存放数据。


本文采用的是第二种:少用一个空间。

头文件:

#ifndef QUEUE_H  
#define QUEUE_H  
//为了判断队列是满还是空,利用第一个位置当作起点,即只有size-1个数据位 
//关键点在于top,end的设置和数据的输出
#include<iostream>  
template<class T>
class queue
{
public:
	queue()
	{
		top = 0;
		end = 0;
		size = 0;
		que = nullptr;
		length = 0;
	}

	queue(int s) :size(s)
	{
		que = new T[size];
		length = 0;
	}
	~qu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值