美文网首页
数据结构(C++实现)--队列

数据结构(C++实现)--队列

作者: ustclcl | 来源:发表于2018-12-18 23:13 被阅读0次

队列queue

  • 先进先出FIFO
    数组描述
  1. location(i) = i-1


    queue1

增加元素 rear+1 O(1)
空队列rear=-1
删除元素1~rear位置的元素全部左移1位 O(n)

  1. location(i) = location(1)+i-1


    queue2

增删都是O(1),空队列有rear<front

  1. location(i) = ( location(1)+i-1)%MaxSize


    queue3

即环形队列
因为空和满时都有front=rear,所以队列不能满

给出3的实现

#include <iostream>
#include "err.h"

using namespace std;

template<class T>
class Queue
{
public:
    Queue(int MaxQueueSize = 10);
    ~Queue() {delete [] queue;}
    bool IsEmpty() const {return front==rear;}
    bool IsFull() const {return(((rear+1)%MaxSize==front)?1:0);}
    T First() const;
    T Last() const;
    Queue<T>& Add(const T&x);
    Queue<T>& Delete(T& x);
private:
    int front;
    int rear;
    int MaxSize;
    T *queue;
};
template<class T>
Queue<T>::Queue(int MaxQueueSize)
{
    MaxSize = MaxQueueSize + 1;   //多申请一个空间,保证队列不会满
    queue = new T[MaxSize];
    front = rear = 0;
}

template<class T>
T Queue<T>::First() const
{
    if (IsEmpty()) throw OutOfBounds();
    return queue[(front+1)%MaxSize];
}

template<class T>
T Queue<T>::Last() const
{
    if(IsEmpty()) throw OutOfBounds();
    return queue[rear];
}
template<class T>
Queue<T>& Queue<T>::Add(const T& x)
{
    if(IsFull()) throw NoMem();
    rear = (rear+1)%MaxSize;
    queue[rear] = x;
    return *this;
}
template<class T>
Queue<T>& Queue<T>::Delete(T& x)
{
    if(IsEmpty()) throw OutOfBounds();
    front = (front+1)%MaxSize;
    x = queue[front];
    return *this;

}
int main()
{
    Queue<int> q(10);
    cout << (q.IsEmpty()?"Empty":"Not Empty");
    cout << q.Last();
    return 0;
}

相关文章

  • c++ 实现队列

    相关资料: 用C++实现一个队列 数据结构代码实现之队列的链表实现(C/C++)

  • Algorithm小白入门 -- 队列和栈

    队列和栈队列实现栈、栈实现队列单调栈单调队列运用栈去重 1. 队列实现栈、栈实现队列 队列是一种先进先出的数据结构...

  • 数据结构(C++实现)--队列

    队列queue 先进先出FIFO数组描述 location(i) = i-1queue1 增加元素 rear+1 ...

  • 看图说话数据结构之二项队列(优先队列)——原理解析

    数据结构之二叉堆(优先队列)——原理解析,数据结构之二叉堆(优先队列)——java实现,数据结构之左式堆(优先队列...

  • Stack - C语言(LeetCode107)

    前言 在实现LeetCode 107题时,发现它用到了栈、队列和树这三种数据结构,使用C++、Java或其它高级语...

  • C++ 实现线程池

    c++实现一个线程池,首先需要有两个数据结构,一个是线程池,一个是任务队列。为了每个线程线程安全的从任务队列里面拿...

  • 队列

    2018年10月31日 队列是一种先进先出(FIFO)的数据结构 1,队列的链表实现 2,队列的数组实现 3,队列...

  • C++队列缓存的实现

    C++队列缓存的实现 为什么使用队列缓存 c++的队列缓存主要用于解决大数据量并发时的数据存储问题,可以将并发时的...

  • 在Python中实现两个堆栈的队列

    在Python中实现两个堆栈的队列。数据结构了解堆栈和队列。然后用两个堆栈实现一个队列。堆栈和队列都是列表。但它们...

  • 集合知识点整理

    1.前言:数据结构——队列 队列接口先说明有哪些功能,但不说是如何实现的,队列有两种实现方式: 循环数组 链表 循...

网友评论

      本文标题:数据结构(C++实现)--队列

      本文链接:https://www.haomeiwen.com/subject/xjirkqtx.html