c++之数据结构——队列(queue)

本文详细介绍了数据结构中的队列,包括队列的基本概念、特性(FIFO)、基本操作如入队、出队,并通过C++展示了顺序队列、循环队列和链式队列(有头节点和无头节点)的实现方式。
摘要由CSDN通过智能技术生成


(发表日期:2020/7/7)

队列的定义

队列是一种最基本的数据结构,是一种只能在一端插入,另一端删除的特殊的线性表。

队列的基本理论

  • 进行插入操作的一端称为队尾(rear),进行删除操作的端称为队头(front)
  • 队列的插入操作叫做入队,删除操作叫做出队
  • 队列的特点:先进先出,故队列又称为先进先出(FIFO—first in first out)线性表。

举个简单的例子:
中午放学了,同学们都到食堂去排队打饭,他们按照先来后到的顺序排成一列(形成了一个队列),最后来的同学站在队伍的最后端(队尾),最先过来的同学(队头)站在队伍的最前端,这位同学打完饭之后就离开了(出队),轮到他后面的一个同学继续打饭(成为了新的队头),这时,又来了一位同学,但他只能站在队伍的最后端等待(入队,成为新的队尾)前面的同学先打饭。

队列的图解

  • 每次出队时,队头元素出队,它的相邻元素成为新的队头元素。
  • 每次入队时,目标元素加入到队列尾部并成为新的队尾元素。

当前队列:
在这里插入图片描述


入队:
在队列尾部入队,并成为队尾
在这里插入图片描述


出队:
队头元素出队,相邻元素称为新的队头
在这里插入图片描述

队列的基本操作

  • 初始化(queue):设置队列为空
  • 判空(isEmpty):判断队列是否为空
  • 判满(isFull)<仅对顺序(循环)队列>:判断队列是否已满
  • 取队头元素(getFront):取出队头元素
    ——条件:队列不为空
  • 取队尾元素(getBack):取出队尾元素
    ——条件:队列不为空
  • 得到队列长度(getLength):返回队列中元素个数
  • 入队(push):将元素入队到队列尾部,称为新的队尾
  • 出队(pop):将队头元素出队,队头右移一位
  • 队列的析构(~queue)<仅对链式队列>:释放队列中元素的内存空间

队列的三种形式及其c++实现(以整型为例)

-顺序队列

顺序表(数组)作为队列的存储结构:
在这里插入图片描述

c++代码实现:

#include<iostream>
using namespace std;
const int MAXSIZE=1000;
class queue{
   
public: 
    queue(){
   	//初始化
        front=0;
        back=-1;
        count=0;
    }
    bool isEmpty(){
   	//判空
        if(count==0){
   
            cout<<"queue is empty.\n";
            return true;
        }
        return false;
    }
    bool isFull(){
   	//判满
        if(count==MAXSIZE||back==MAXSIZE-1){
   
            cout<<"queue is full.\n";
            return true;
        }
        return false;
    }
    int getFront(){
   	//取队头
        if(isEmpty()){
   
            return -1;
        }
        return data[front];
    }
    int getBack(){
   	//取队尾
        if(isEmpty()){
   
            return -1;
        }
        return data[back];
    }
    bool push(int num){
   	//入队
        if(isFull()){
   
            return false;
        }
        back++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值