`

循环队列

阅读更多
这段代码存在内存泄漏,先mark一下!
SeqQueue.h
#ifndef SEQQUEUE_H
#define SEQQUEUE_H

#include<iostream>
#include"Queue.h"
using namespace std;

template<typename T>
class SeqQueue:public Queue<T>{
public:
    SeqQueue(int sz=100);
    ~SeqQueue(){/*delete elements;*/}//这里有点问题
    bool EnQueue(const T &x);
    bool DeQueue(T &x);
    bool getFront(T &x);
    bool IsEmpty()const;
    bool IsFull()const;
    int getSize()const;
    void makeEmpty();
    friend ostream& operator<<(ostream& os,SeqQueue<T>& queue){
        for(int i=queue.front;i!=queue.rear;i=(i+1)%queue.maxSize){
            os << queue.elements[i] << " ";
        }
        os << endl;
        return os;
    }

protected:
    int rear,front;
    T *elements;
    int maxSize;
};

#endif // SEQQUEUE_H


SeqQueue.cpp
#include"SeqQueue.h"
#include<assert.h>

template<typename T>
SeqQueue<T>::SeqQueue(int sz)
{
    front = rear = 0;
    maxSize = sz;
    elements = new T(maxSize);
    assert(NULL!=elements);
}

template<typename T>
bool SeqQueue<T>::EnQueue(const T &x)
{
    if(IsFull()){
        return false;
    }
    elements[rear]=x;
    rear=(rear+1)%maxSize;
    return true;
}

template<typename T>
bool SeqQueue<T>::DeQueue(T &x)
{
    if(IsEmpty()){
        return false;
    }
    x = elements[front];
    front = (front+1)%maxSize;
    return true;
}

template<typename T>
bool SeqQueue<T>::getFront(T &x)
{
    if(IsEmpty()){
        return false;
    }
    x = elements[front];
    return true;
}

template<typename T>
bool SeqQueue<T>::IsEmpty() const
{
    return front==rear?true:false;
}

template<typename T>
bool SeqQueue<T>::IsFull() const
{
    return (rear+1)%maxSize==front?true:false;
}

template<typename T>
int SeqQueue<T>::getSize() const
{
    return (rear-front+maxSize)%maxSize;//循环队列里面最多只能放maxSize-1个元素
}


int main()
{
    SeqQueue<int> queue(20);
    int num=0;
    for(int i=0;i<10;++i){
        num++;
        queue.EnQueue(num);
    }
    for(int i=0;i<5;++i){
        queue.DeQueue(num);
    }
    cout << queue;
}

6 7 8 9 10 

分享到:
评论

相关推荐

    循环队列源代码

    循环队列源代码 循环队列是一种数据结构,它通过一个数组或链表来存储元素,并提供了队列操作的接口。队列是一种先进先出的数据结构,元素的添加和删除都是从队头和队尾进行的。在本资源中,我们将探讨循环队列的...

    循环队列的总结

    循环队列是一种线性数据结构,它在计算机科学中被广泛应用于数据缓存、消息队列等场景。相比于传统的队列,循环队列利用数组的循环特性,避免了队列满或空时需要重新分配内存的问题,提高了空间利用率和操作效率。在...

    循环队列 杨辉三角

    循环队列是一种线性数据结构,它通过在队尾出队和队头入队时进行适当的操作,使得队列在物理存储空间上形成一个环形结构。这种设计使得队列在处理大量数据时能有效避免数组下标越界的问题,提高了空间利用率。在...

    串口缓冲区 循环队列

    循环队列作为一种高效的数据结构,在串口通信的缓冲区管理中扮演着重要角色。这里我们将深入探讨串口缓冲区的概念、循环队列的工作原理以及如何在STM32F103ZET6微控制器上应用这些技术。 串口缓冲区是用于存储串口...

    数据结构 严蔚敏 C语言版 循环队列

    书中可能包含了各种操作循环队列的示例代码,通过分析和实践这些代码,可以加深对循环队列的理解,提升编程技能。 总之,循环队列是数据结构中不可或缺的一部分,它在解决实际问题时发挥着重要作用。严蔚敏教授的...

    循环队列的基本操作和实现

    循环队列是一种线性数据结构,它在物理结构上实现了一个首尾相接的闭合序列,从而解决了普通队列在满和空时的操作限制。循环队列的主要优点是消除了队头和队尾的特殊状态,使得在处理数据时效率更高。下面将详细介绍...

    循环队列的C++实现

    循环队列是一种线性数据结构,它在物理结构上实现了一个闭合的循环,因此队首和队尾可以在数组的任意位置。这种设计使得在队列满或空时,仍能有效地进行入队和出队操作,避免了普通队列在达到边界条件时的特殊处理。...

    循环队列的基本操作及应用----数据结构试验

    循环队列是一种特殊的队列,它在队列的两端都可以进行插入和删除操作,通过对循环队列的基本操作和应用,我们可以更好地理解和掌握数据结构的概念。 循环队列的基本操作 循环队列的基本操作包括构造、清空、销毁、...

    Android之循环队列操作

    循环队列是一种常见的线性数据结构,它具有先进先出(FIFO)的特性,即最早进入队列的元素最先离开。这个特性使得循环队列在处理一系列有序任务或者缓存管理等方面有着广泛的应用。本文将详细探讨Android中如何实现...

    一个串口循环队列,可以制作协议收发,非常好用

    本项目涉及的关键知识点是“循环队列”、“485收发”以及“协议制作”,这些对于理解如何高效地实现串口数据传输至关重要。 首先,我们来了解一下**循环队列**。循环队列是一种线性数据结构,它利用数组的循环特性...

    C只有尾指针的循环队列(数据结构作业)

    ### C语言实现仅有尾指针的循环队列 在数据结构的学习过程中,循环队列是一种重要的数据结构之一,尤其在解决计算机系统中的缓冲问题时应用广泛。本篇将基于题目提供的部分代码,深入探讨如何使用C语言实现一个仅有...

    循环队列和约瑟夫环问题

    循环队列和约瑟夫环问题 循环队列是一种特殊的队列结构,它的特点是队列的末尾元素连接着队列的开头元素,形成一个环形结构。这种数据结构可以用来解决约瑟夫环问题。 约瑟夫环问题是一个经典的问题,它是由古罗马...

    TIA博途SCL语言_循环队列FIFO算法_FB库文件.rar

    在这个场景中,我们关注的是使用SCL(Structured Control Language)编程语言实现的一种特定算法——循环队列FIFO(First In First Out)算法,并且这个算法被封装在了一个FB(Function Block)库文件中。...

    数据结构作业之七循环队列

    循环队列是数据结构中的一种线性数据结构,它的特点是队尾指针可以在数组范围内的任何位置循环前进,从而避免了普通队列在队列满时需要重新申请空间的问题。循环队列的设计使得其在存储空间上的利用率较高,且在处理...

    多线程与循环队列

    在计算机科学中,多线程和循环队列是两个重要的概念,它们在高效并发编程中发挥着关键作用。本文将详细探讨多线程环境下的循环队列应用。 首先,我们来理解多线程。多线程是一种编程模型,允许一个程序同时执行多个...

    数据结构实验三(循环队列基本操作)题目和源程序

    ### 数据结构实验三:循环队列基本操作及约瑟夫环问题 #### 实验背景与目标 本实验旨在通过实际编程任务加深学生对于循环队列的理解及其在解决具体问题中的应用能力。实验主要包括两个部分: 1. **循环队列基本...

    java队列实现(顺序队列、链式队列、循环队列)

    在Java中,队列的实现主要有三种:顺序队列、链式队列和循环队列。下面我们将详细探讨这三种队列的实现方式。 1. **顺序队列**: 顺序队列通常是基于数组实现的。在Java中,我们可以使用ArrayList或LinkedList来...

    array_串口队列_循环队列_

    循环队列是串口通信中数据缓冲区管理的一种高效实现,它在处理实时性要求较高的数据流时尤为有用。下面我们将详细探讨“array_串口队列_循环队列_”这一主题。 首先,我们来看一下“串口队列”。串口队列是串行通信...

Global site tag (gtag.js) - Google Analytics