使用链表实现队列

本文介绍如何使用链表实现队列的基本操作,包括Push()、Pop()、Front()和Back()等,并提供源代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用链表实现队列和堆栈不一样的地方在于:

需要另外的一个指针指向队列尾部。

每次Push()在链表尾部进行。

每次Pop()则在链表头部进行。

同样,在查看队列头尾元素时(Front()、Back()),对队列进行判空操作

由调用者进行。


源代码

MyQueue.h

#include <iostream>

struct ListNode
{
	int nData;
	ListNode* pNext;
};

class MyQueue
{
public:
	MyQueue() : m_pHead(NULL), m_pTail(NULL) {}

	void Push(int data);
	void Pop();
	int Front();
	int Back();
	bool Empty();

private:
	ListNode* m_pHead;
	ListNode* m_pTail;
};

MyQueue.cpp

#include "MyQueue.h"

// 在链表尾部插入
void MyQueue::Push(int data)
{
	ListNode* pNew = new ListNode;
	pNew->nData = data;
	pNew->pNext = NULL;

	// 插入第一个元素时,
	// 两指针均指向新元素
	if (NULL == m_pTail)
	{
		m_pTail = pNew;
		m_pHead = pNew;
	}
	else
	{
		m_pTail->pNext = pNew;
		m_pTail = pNew;
	}
}

int MyQueue::Back()
{
	return m_pTail->nData;
}

// 在链表头部弹出
void MyQueue::Pop()
{
	ListNode* pPop =  m_pHead;
	m_pHead = m_pHead->pNext;
	delete pPop;

	// 弹出最后一个元素时,两指针均置空
	if (NULL == m_pHead)
		m_pTail = NULL;

}

int MyQueue::Front()
{
	return m_pHead->nData;
}

bool MyQueue::Empty()
{
	return NULL == m_pHead || NULL == m_pTail;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值