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

📄 vqueue.h

📁 为了实现RTP数据重组,写了双指针链表,类似动态hash表(网上资料太少了),有添加(自动排序),删除和清除.我还在扩展功能
💻 H
字号:
// VQueue.h: interface for the CVQueue class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_VQUEUE_H__AA0E6592_F1BA_48E8_A71B_4F5353C90015__INCLUDED_)
#define AFX_VQUEUE_H__AA0E6592_F1BA_48E8_A71B_4F5353C90015__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "VNode.h"

class CVQueue  
{
public:
	CVQueue()
	{
		m_pHead = NULL;
	};

	virtual ~CVQueue()
	{
		Clean();
	};

	void Add(ULONG ulKey)
	{
		if (m_pHead != NULL)
		{
			CVNode* pNode = m_pHead;

			while(pNode != NULL)
			{
				if (pNode->m_ulKey > ulKey)
				{
					Insert(pNode->pPrev, pNode, ulKey);
					break;
				}
				else if (pNode->m_ulKey == ulKey)
				{
					
				}
				if (pNode == pNode->pNext)
				{
					AddNode(pNode, ulKey);
					break;
				}
				pNode = pNode->pNext;
			}
		}
		else
		{
			m_pHead = AddNode(NULL, ulKey);
			return;
		}
	};

	void Delete(ULONG ulKey)
	{
		Remove(ulKey);
	};

private:
	CVNode* AddNode(CVNode* pPrevNode, ULONG ulKey) //加入尾
	{
		if (pPrevNode == NULL)
		{
			CVNode* pNewNode = new CVNode;
			pNewNode->m_ulKey = ulKey;
			return pNewNode;
		}
		else
		{
			CVNode* pNewNode = new CVNode;
			pPrevNode->pNext = pNewNode;
			pNewNode->pPrev = pPrevNode;
			pNewNode->m_ulKey = ulKey;
		}
		return NULL;
	};

	void Insert(CVNode* pPrevNode, CVNode* pNextNode, ULONG ulKey)
	{
		CVNode* pNode = new CVNode;
		pNode->m_ulKey = ulKey;

		pPrevNode->pNext = pNode;
		pNode->pPrev = pPrevNode;

		pNode->pNext = pNextNode;
		pNextNode->pPrev = pNode;
	};

	void Remove(ULONG ulKey)
	{
		if (m_pHead != NULL)
		{
			CVNode* pNode = m_pHead;
			while(pNode != NULL)
			{
				if (pNode == pNode->pNext)
				{
					break;
				}

				if (pNode->m_ulKey == ulKey)				
				{
					pNode->pPrev->pNext = pNode->pNext;
					pNode->pNext->pPrev = pNode->pPrev;

					delete pNode;
					pNode = NULL;
					break;
				}

				pNode = pNode->pNext;
			}
		}
	};

	void Clean()
	{
		if (m_pHead != NULL)
		{
			CVNode* pNode = m_pHead;
			while(pNode != NULL)
			{
				if (pNode == pNode->pNext)
				{
					break;
				}
				printf("%d\r\n", pNode->m_ulKey);
				
				CVNode* pTempNode = pNode->pNext;
				delete pNode;
				pNode = NULL;
				pNode = pTempNode;
			}
			printf("%d\r\n", pNode->m_ulKey);
			delete pNode;
			pNode = NULL;
		}
	};

	CVNode* m_pHead;
};

#endif // !defined(AFX_VQUEUE_H__AA0E6592_F1BA_48E8_A71B_4F5353C90015__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -