实现数据结构中的队列---先进先出(FIFO)

队列完完全全就是生活中的队列(当然不包含插队的情况),饭堂打饭需要排队,去银行办理业务也需要排队,显然的,排在第一的那个人儿肯定最先得到服务,完成待办的事情。最后的那个人得看银行下班了没!

这些都是实实在在的队列,数据结构中的队列所实现的功能也正是如此,把元素加到队列叫入队(enqueue),把元素从队列中移除叫出队(dequeue),只能从队头中获取元素(front),额,队列的主要操作就三个了,看看图就知道队列的实现很简单。

在这里插入图片描述

队列也可以分为两种实现方式,一是顺序队列,用原生数组来实现,二是链式队列,使用指针操作来实现。

先来实现一个顺序队列,很简单的,使用两个标记变量,当有元素入队则队尾标记自增1,相类似地,执行出队列操作则队头标记自增1。但要稍微注意的情况是,需要对队头和队尾标记变量进行取余操作,那为什么要取余呢??为了可以同时进行入队和出队的操作,看图就马上明白!!假设一个满的(满的!!!)队列,进行了很多次出队列操作,那么队尾标记仍然是在数组的末尾,但是队头标记已经自增了很多次,即将来到队尾,如果这时候进行入队操作,那队尾是不是只能回到数组的首元素,确实是的。

在这里插入图片描述
明白了那就上代码:

#ifndef STATICQUEUE_H
#define STATICQUEUE_H

template <typename T, int N>
class StaticQueue
{
   
protected:
	T array[N];
	int m_front;
	int m_rear;
	int m_length;
public:
	StaticQueue()
	{
   
		m_front = 0;
		m_rear = 0;
		m_length = 0;
	}
	
	bool enqueue(const T& obj)	// 几行代码就完成入队操作
	{
   
		bool ret = true;
		
		if( m_length < N )
		{
   
			array[m_rear] = obj;
			m_rear = (m_rear + 1) % N;	// 使得队列可持续操作
			+
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值