泛型队列实现文件C++

 
//	queue.cpp

template<class T>
void Queue<T> ::m_copyElement (const Queue &queue)
{
	QueueItem<T> * scan = queue.m_head ;
	while (scan != NULL)
	{
		push(scan ->m_item) ;
		scan = scan ->m_next ;
	}
}

template<class T> template<typename Iter>
void Queue<T> ::m_copyElement (Iter beg, Iter end)
{
	while (beg != end)
	{
		push(*beg) ;
		++beg ;
	}
}

template<class T>
void Queue<T> ::m_destroy (void)
{
	while (!isEmpty())
	{
		pop() ;
	}
}

template<class T> template<typename Iter>
Queue<T> ::Queue (Iter beg, Iter end): m_head(0), m_tail(0)
{
	m_copyElement(beg, end) ;
}

template<class T>
Queue<T> ::Queue (const Queue & queue): m_head(0), m_tail(0)
{
	m_copyElement(queue) ;
}

template<class T>
Queue<T> & Queue<T> ::operator = (const Queue & queue)
{
	m_destroy() ;
	m_copyElement(queue) ;

	return *this ;
}

template<class T>
Queue<T> ::~Queue (void)
{
	m_destroy() ;
}

template<class T> template<typename Iter>
void Queue<T> ::assign (Iter beg, Iter end)
{
	m_destroy() ;
	m_copyElement(beg, end) ;
}

template<class T>
bool Queue<T> ::isEmpty (void) const
{
	return NULL == m_head ;
}

template<class T>
T & Queue<T> ::front (void)
{
	return m_head ->m_item ;
}

template<class T>
const T & Queue<T> ::front (void) const
{
	return m_head ->m_item ;
}

template<class T>
void Queue<T> ::push (const T & item)
{
	QueueItem<T> * newItem = new QueueItem<T>(item) ;
	if (!isEmpty())
	{
		m_tail ->m_next = newItem ;
		m_tail = newItem ;
	}
	else
	{
		m_head = m_tail = newItem ;
	}
}

template<class T>
void Queue<T> ::pop (void)
{
	QueueItem<T> * pTemp = m_head ;
	m_head = m_head ->m_next ;

	delete pTemp ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是实现链式存储的泛型队列的示例代码(使用C++语言): ``` template <typename T> class QueueNode { public: T data; QueueNode<T>* next; QueueNode(T data) { this->data = data; next = nullptr; } }; template <typename T> class Queue { private: QueueNode<T>* front; QueueNode<T>* rear; int size; public: Queue() { front = nullptr; rear = nullptr; size = 0; } ~Queue() { while (front != nullptr) { QueueNode<T>* temp = front; front = front->next; delete temp; } } void enqueue(T data) { QueueNode<T>* newNode = new QueueNode<T>(data); if (rear == nullptr) { front = newNode; } else { rear->next = newNode; } rear = newNode; size++; } T dequeue() { if (front == nullptr) { throw std::out_of_range("Queue is empty"); } QueueNode<T>* temp = front; front = front->next; T data = temp->data; delete temp; size--; if (front == nullptr) { rear = nullptr; } return data; } T peek() { if (front == nullptr) { throw std::out_of_range("Queue is empty"); } return front->data; } bool isEmpty() { return (front == nullptr); } int getSize() { return size; } }; ``` 该队列使用泛型类型 T 来表示队列中的元素,可以存储任意类型的数据。队列内部使用链式存储结构来实现,每个节点包含一个元素和指向下一个节点的指针。队列的基本操作包括入队、出队、查看队首元素、判断队列是否为空、获取队列的大小。在入队时,如果队列为空,则新节点成为队列的首节点;否则,将新节点添加到队列尾部。在出队时,如果队列不为空,则返回队列的首节点元素,并删除该节点;否则,抛出队列为空的异常。在查看队首元素时,如果队列不为空,则返回队列的首节点元素;否则,抛出队列为空的异常。在判断队列是否为空时,如果队列为空,则返回 true;否则,返回 false。在获取队列的大小时,返回队列中元素的个数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值