zoukankan      html  css  js  c++  java
  • 【C++】队列的实现

    queue.hpp<span style="white-space:pre">	</span>//定义队列类,C++类非常适合于描述
    #ifndef QUEUE_HPP_INCLUDED
    #define QUEUE_HPP_INCLUDED
    
    typedef item_type Item;<span style="white-space:pre">	</span>//item_type为队列中的数据类型,可以是基本数据类型也可以是自己定义的类
    
    class Queue
    {
    private:
        struct Node{Item item;struct Node* next;};   //使用链表表示队列项
        enum{Q_SIZE=10};    //队列的默认大小
        Node* queueFront;   //指向队列头
        Node* queueRear;    //指向队列尾
        int items;  //队列项目数
        const int qSize;    //队列大小
    public:
        Queue(int qSize=Q_SIZE);
        ~Queue();
        bool isEmpty()const;    //队列是否为空
        bool isFull()const;     //队列是否为满
        bool addItem(const Item& item); //到达一个顾客
        bool deleteItem(Item& item);    //服务完一个顾客
        int itemNumber()const;  //队列中的顾客数目
    };
    
    #endif // QUEUE_HPP_INCLUDED
    

    类方法的实现

    queue.cpp

    #include<cstdlib>   //rand()
    #include"queue.hpp"
    
    Queue::Queue(int qs):qSize(qs)
    {
        queueFront=queueRear=NULL;
        items=0;
    }
    
    Queue::~Queue()
    {
        Node* temp;
        while(queueFront!=NULL)
        {
            temp=queueFront;
            queueFront=queueFront->next;
            delete temp;
        }
    }
    
    bool Queue::isEmpty()const
    {
        return items==0;
    }
    
    bool Queue::isFull()const
    {
        return items==qSize;
    }
    
    int Queue::itemNumber()const
    {
        return items;
    }
    
    bool Queue::addItem(const Item& item)
    {
        if(isFull())
            return false;
        Node* add=new Node;
        add->item=item;
        add->next=NULL;
        items++;
        if(queueFront==NULL)
            queueFront=add;
        else
            queueRear->next=add;
        return true;
    }
    
    bool Queue::deleteItem(Item& item)
    {
        if(queueFront==NULL)
            return false;
        item=queueFront->item;
        items--;
        Node* temp=queueFront;
        queueFront=queueFront->next;
        delete temp;
        if(items==0)
            queueRear=NULL;
        return true;
    }
    
    void Customer::set(long when)
    {
        processTime=std::rand()%3+1;
        arrive=when;
    }
    


  • 相关阅读:
    《c程序设计语言》读书笔记--大写转小写
    《c程序设计语言》读书笔记--字符串比较
    《c程序设计语言》读书笔记--反转字符串
    spring接收json字符串的两种方式
    logback的使用
    初识Vim
    Chrome控制台
    构造有层次的大纲
    让chrome浏览器快的不要不要的
    排序算法Java版
  • 原文地址:https://www.cnblogs.com/corfox/p/5415027.html
Copyright © 2011-2022 走看看