栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

在老师的基础上改的,C++环形队列类模板

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在老师的基础上改的,C++环形队列类模板

感谢老师,讲的很认真非常好

1 - 环形队列类模板

#ifndef MYQUEUE_H
#define MYQUEUE_H

#include "Customer.h"

template 
class MyQueue
{
public:
    MyQueue(int queueCapacity);   //创建队列
    virtual ~MyQueue();    //销毁队列
    void ClearQueue();     //清空队列
    bool QueueEmpty()const;//判空队列
    bool QueueFull()const; //判满队列
    int QueueLength()const;//队列长度
    bool EnQueue(T element);      //新元素入队
    bool DeQueue(T &element);   //首元素出队
    void QueueTraverse();  //遍历队列
private:
    T *m_pQueue;  //队列数组指针
    int m_iQueueLen;//队列元素个数
    int m_iQueueCapacity;  //队列数组容量
    int m_iHead;    //队列头
    int m_iTail;    //队列尾
};

template 
MyQueue::MyQueue(int queueCapacity)
{
    m_iQueueCapacity = queueCapacity;
    ClearQueue();
    m_pQueue = new T[m_iQueueCapacity];
}

template 
MyQueue::~MyQueue()
{
    delete[]m_pQueue;
    m_pQueue = NULL;
}

template 
void MyQueue::ClearQueue()
{
    m_iQueueLen = 0;
    m_iHead = 0;
    m_iTail = 0;
}

template 
bool MyQueue::QueueEmpty() const
{
    if (m_iQueueLen == 0)
 return true;
    else
 return false;
}

template 
bool MyQueue::QueueFull() const
{
    if (m_iQueueLen == m_iQueueCapacity)
 return true;
    else
 return false;
}

template 
int MyQueue::QueueLength()const
{
    return m_iQueueLen;
}

template 
bool MyQueue::EnQueue(T element)
{
    if (QueueFull())
 return false;
    else
    {
 m_pQueue[m_iTail] = element;
 m_iTail++;
 m_iTail = m_iTail % m_iQueueCapacity;
 m_iQueueLen++;
 return true;
    }
}

template 
bool MyQueue::DeQueue(T &element)
{
    if (QueueEmpty())
    {
 return false;
    }
    else
    {
 element = m_pQueue[m_iHead];
 m_iHead++;
 m_iHead = m_iHead % m_iQueueCapacity;
 m_iQueueLen--;
 return true;
    }
}

template 
void MyQueue::QueueTraverse()
{
    cout << "" << endl;

    

    for (int i = m_iHead; i < (m_iQueueLen + m_iHead); i++)
    {
 //cout << m_pQueue[i % m_iQueueCapacity] << endl;
 cout << i << endl;
 m_pQueue[i % m_iQueueCapacity].printInfo();
    }

    cout << "" << endl;
}

#endif

2 - 测试类

#ifndef CUSTOMER_H
#define CUSTOMER_H
#include 
#include 
using namespace std;

class Customer
{
public:
    Customer(string name="",int age=0);
    void printInfo() const;
private:
    string m_strName;
    int m_iAge;
};

Customer::Customer(string name, int age)
{
    m_strName = name;
    m_iAge = age;
}

void Customer::printInfo() const
{
    cout << "" << endl;
    cout << "姓名: " << m_strName << endl;
    cout << "年龄: " << m_iAge << endl;
    cout << "" << endl;
}

#endif

3- 测试

#include 
using namespace std;
#include 

#include "MyQueue.h"

int main()
{
    
    MyQueue *p = new MyQueue(4);

    Customer c1("张三", 20);
    Customer c2("李四", 25);
    Customer c3("小华", 36);
    Customer c4("王二", 28);
    Customer c5("小明", 18);

    p->EnQueue(c1);
    p->EnQueue(c2);
    p->EnQueue(c3);
    p->EnQueue(c4);
    p->EnQueue(c5);

    //cout << p->QueueLength() << endl;
    p->QueueTraverse();

    Customer c("", 0);
    p->DeQueue(c);
    c.printInfo();

    //cout << p->QueueLength() << endl;
    p->QueueTraverse();

    delete p;
    p = NULL;

    
    

    
    

    
    
    system("pause");
    return 0;
}

5- 运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/233064.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号