队列的实现:链式队列

本文介绍了如何使用链式存储来实现队列,通过维护头指针和尾指针进行操作,避免假溢出问题。在出队时需注意释放内存。文章提供了类定义和实现的代码,并附有数据结构与算法的专栏目录。
部署运行你感兴趣的模型镜像

    队列常常也使用链式存储的方式来实现。为了方便操作,同顺序存储一样,我们要维护一个头指针和一个尾指针。如下图:


在链式队列中显然不会出现假溢出的情况。但在出队时,要及时释放内存。由于在队列的实现:顺序队列中,对队列的描述已经很清楚了。就闲话不多说,直接上代码:

类定义和类实现

#include<iostream>
#include<iomanip>
using namespace std;
typedef int ELemType;
class QNode   //节点类型  
{
	public:
	ELemType data;
	QNode *next;
	QNode(ELemType v, QNode*p=NULL):data(v),next(p){};
};
class LinkQueue  //链式队列 
{
	private:
	int size;
	QNode *front;   //头指针 
	QNode *rear;    //尾指针 
	public:
	LinkQueue();    //默认构造方法 
	~LinkQueue();   //析构 
	int getSize();     //链表大小 
	bool getFront(ELemType&);  //获取头节点 
	bool getRear(ELemType&);   //获取尾节点
	bool empty();      //队列是否为空 
	void clear();      //清空链表 
	void enQueue(ELemType);   //入队 
	void deQueue();    //出队  
	void queueTraverse();   //队列遍历 
};
//类实现
LinkQueue::LinkQueue()
{
	front=rear=NULL;
	size=0;
}
LinkQueue::~LinkQueue()
{
	clear();
} 
int LinkQueue::getSize()
{
	return size;
}
bool LinkQueue::getFront(ELemType &item)
{
	if(front)
	{
		item=front->data;
		return true;
	}
	cout<<"空队列!"<<endl;
	return false;
}
bool LinkQueue::getRear(ELemType &item)
{
	if(rear)
	{
		item=rear->data;
		return true;
	}
	cout<<"空队列!"<<endl;
	return false;	
}
bool LinkQueue::empty()
{
	return size==0;
}
void LinkQueue::clear()
{
	if(front)
	{
		QNode *q,*p=front;
		while(p)
		{
			q=p->next;
			delete p;
			p=q;
		}
	}
	rear=NULL;   //这一句,不能忘了  
	size=0;
}
void LinkQueue::enQueue(ELemType data)
{
	if(front)
	{
		rear->next=new QNode(data,NULL);
		rear=rear->next;
	}
	else
	{
		front=rear=new QNode(data,NULL);
	}
	size++;
}
void LinkQueue::deQueue()
{
	if(front)
	{
		QNode* p=front;
		front=front->next;
		delete p;
		size--;
	}
}
void LinkQueue::queueTraverse()
{
	if(front)
	{
		QNode *p=front;
		while(p)
		{
			cout<<setw(4)<<p->data;
			p=p->next;
		}
		cout<<endl;
	}
	else
	cout<<"队列为空!"<<endl;
}
主函数

int main()
{
	cout<<"链式队列演示"<<endl;
	LinkQueue queue;
	ELemType item;
	cout<<"入队,输入0结束:";
	while(cin>>item && item)
		queue.enQueue(item);
	cout<<"遍历"<<endl;
	queue.queueTraverse();
	if(queue.getFront(item))
	cout<<"获取队头元素:"<<item<<endl;
	if(queue.getRear(item))
	cout<<"获取队尾元素:"<<item<<endl;	
	cout<<"队头出队!"<<endl;
	queue.deQueue();
	cout<<"遍历"<<endl;
	queue.queueTraverse();
	queue.clear();
	cout<<"清空队列后,是否为空:";	
	if(queue.empty())
	cout<<"Yes!"<<endl;
	else
	cout<<"No!"<<endl;	
	system("pause");
	return 0;
}
运行:



完整代码下载:队列的实现:链式队列

专栏目录看这里:




您可能感兴趣的与本文相关的镜像

Qwen3-8B

Qwen3-8B

文本生成
Qwen3

Qwen3 是 Qwen 系列中的最新一代大型语言模型,提供了一整套密集型和专家混合(MoE)模型。基于广泛的训练,Qwen3 在推理、指令执行、代理能力和多语言支持方面取得了突破性进展

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值