不牺牲存储单元的循环队列

本文介绍了一种不浪费存储单元的循环队列实现方式,通过设置标志位flag来区分队列满和空的状态。在入队和出队操作中,动态调整front和rear指针,并在队满时切换flag状态。此外,提供了完整的C++代码实现,包括队列的初始化、入队、出队、取头元素和打印队列等操作,并通过测试案例展示了其正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不牺牲存储单元的循环队列

题目

循环队列中设置一个标志flag,当frontrear且flag0时为队空,当frontrear且flag1时为队满,实现相应的入队和出队算法并验证。

浅析

循环队列的底层是什么?

循环队列的底层是数组,所以我们需要在程序的一开始设置一个常量const用于保存我们的队列的最大容量。

const int QueueSize=5;

传统的循环队列是如何实现的?

传统的循环队列采取浪费最后一个存储空间的方式来进行实现。

核心就是对队列的容量取余数。

代码

ECirQueue.h

/*
*不牺牲尾端空间的循环队列
*特殊的循环队列
*/
#include<iostream>
using namespace std;

const int QueueSize=5;

class ECirQueue
{
   
   
private:
    /* data */
    // int data[QueueSize];    //队列的底层依然为数组
    // int front;              //队头指针
    // int rear;               //队尾指针
public:
    int data[QueueSize];    //队列的底层依然为数组
    int front;              //队头指针 假的队头
    int rear;               //队尾指针
    int flag;               //标志
    ECirQueue();
    ~ECirQueue();
    void EnQueue(int x);   //进队
    int DeQueue();         //出队,令队头元素出队
    int GetHead();         //取队头元素 不删除
    bool Empty();           //判断队列是否为空
    void PrintQueue();      //遍历输出Queue 排队顺序
};

ECirQueue.cpp

#include"ECirQueue.h"

ECirQueue::ECirQueue()
{
   
   
    rear=-1;
    this->rear=this->front;
    flag=0;
}

ECirQueue::~ECirQueue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值