⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 queue.cpp

📁 银行排队的数学模型的实现 问题: n银行有n个窗口对外营业
💻 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 + -