未模板化的队列类实现

自编队列类,多个参数降低复杂度提高内存利用率。代码如下:

//-------------头文件----------------

#pragma once

using Type = int;

class CQueue
{
    Type*m_pQueue;//容器体
    int m_pTop,m_pBottom;//position bottom入top出
    int m_nSize;//容器大小
    int m_nCount;//个数------多出的参数
public:
    CQueue(int nSize = 16);
    ~CQueue();

void Push(const Type& data        );
    void  Pop();
    Type& Front();
    Type& Back();
    int Size() { return m_nSize; }
    bool IsEmpty() { return !m_nCount; }
};

//-------------实现文件--------------------------------------------

#include "CQueue.h"
#include<memory>
CQueue::CQueue(int nSize)
{
    m_pQueue = new Type[m_nSize =nSize];
    m_pTop= m_pBottom= 0;
    m_nCount = 0;
}

~CQueue::CQueue()
{
    delete m_pQueue ;
}

void CQueue::Push(const Type & data)
{
    //确定尾部back的位置,并且没有满。
    if (m_nCount<m_nSize) {
        memcpy(&m_pQueue[m_pBottom ] ,&data,sizeof(Type));
        ++m_nCount; 
        m_pBottom = (m_pBottom + 1) % m_nSize;
    }
}

void CQueue::Pop()
{
    if (m_nCount) {
        m_pTop = (m_pTop + 1) % m_nSize;
        --m_nCount;
    }
}

Type & CQueue::Front()
{
    return m_pQueue[m_pTop];
}

Type & CQueue::Back()
{
    return m_pQueue[m_pBottom];
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值