📄 queue.cpp
字号:
#include "queue.h"
Queue::Queue() // Queue 的构造函数
{
m_pHead = m_pRear = NULL;
}
Queue::~Queue() // Queue的析构函数
{
Client* ptemp;
while (m_pHead)
{
ptemp = m_pHead;
m_pHead = m_pHead->m_pNext;
SAFEDELETE(ptemp);
}
}
int Queue::Free() // 释放Queue申请的内存
{
Client* ptemp;
while (m_pHead)
{
ptemp = m_pHead;
m_pHead = m_pHead->m_pNext;
SAFEDELETE(ptemp);
}
m_pHead = m_pRear = NULL;
return TRUE;
}
/*
int Queue::Get_Top_Arrtime()
{
if (!m_pHead)
{
return 0;
}
else
{
return m_pHead->m_nArrive_Time;
}
}
*/
int Queue::Join_Queue(int narrive_time, int ndeal_time) // 将顾客数据输入,并生成一个client对象,插入到顾客队列里
{
if (!m_pHead) // 当头指针为空时,直接将头指针指向新对象
{
m_pHead = new Client(narrive_time, ndeal_time);
m_pRear = m_pHead;
return TRUE;
}
else
{
if (m_pRear->m_nArrive_Time<=narrive_time) // 当新顾客的到达世界比其他顾客都晚时,插入到队列尾部
{
m_pRear->m_pNext = new Client(narrive_time, ndeal_time);
if (!m_pRear->m_pNext)
{
return FALSE;
}
else
{
m_pRear->m_pNext->m_pPrev = m_pRear;
m_pRear = m_pRear->m_pNext;
return TRUE;
}
}
if (m_pHead->m_nArrive_Time>=narrive_time) // 当新顾客到达时间比其他顾客都早时,插入到队列头部
{
m_pHead->m_pPrev = new Client(narrive_time, ndeal_time);
if (!m_pHead->m_pPrev)
{
return FALSE;
}
else
{
m_pHead->m_pPrev->m_pNext = m_pHead;
m_pHead = m_pHead->m_pPrev;
return TRUE;
}
}
Client* ptemp = m_pRear->m_pPrev;
while (ptemp) // 新顾客在队列中,做判断,插入到合理位置
{
if (ptemp->m_nArrive_Time<=narrive_time)
{
ptemp->m_pNext->m_pPrev = new Client(narrive_time, ndeal_time);
if (!ptemp->m_pNext->m_pPrev)
{
ptemp->m_pNext->m_pPrev = ptemp;
return FALSE;
}
ptemp->m_pNext->m_pPrev->m_pPrev = ptemp;
ptemp->m_pNext->m_pPrev->m_pNext = ptemp->m_pNext;
ptemp->m_pNext = ptemp->m_pNext->m_pPrev;
return TRUE;
}
ptemp = ptemp->m_pPrev;
}
}
return FALSE;
}
int Queue::Push_Client(Client* pclient) // 直接将新顾客推入到尾部。推入的是已经创建好的对象,并非原始数据
{
if (!m_pRear)
{
m_pHead = m_pRear = pclient;
m_pHead->m_pNext = NULL;
m_pRear->m_pPrev = NULL;
return TRUE;
}
m_pRear->m_pNext = pclient;
m_pRear->m_pNext->m_pPrev = m_pRear;
m_pRear = m_pRear->m_pNext;
m_pRear->m_pNext = NULL;
return TRUE;
}
int Queue::Quit_Queue() // 将队列头部的对象销毁,并改变头指针
{
Client* ptemp;
ptemp = m_pHead;
if (m_pHead)
{
m_pHead = m_pHead->m_pNext;
if (m_pHead)
{
m_pHead->m_pPrev = NULL;
}
else
{
m_pHead = m_pRear = NULL;
}
}
SAFEDELETE(ptemp);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -