Unity学习之C#数据结构_栈和队列__队列__顺序队列(循环顺序队列)

本文介绍了队列的概念,包括顺序队列和链队列,并重点讲解了循环顺序队列的工作原理。通过示例展示了两种情况:数组满时的正常扩容和有删除操作时的情况。最后提供了实现循环顺序队列的代码,并进行了测试以验证其正确性。
摘要由CSDN通过智能技术生成
这次介绍的是循环队列,介绍循环队列之前,先介绍一下队列的概念。队列(Queue):入队(添加数据)操作限定在队尾(Rear),其他操作限定在队头(Front)的线性表,当队列中没有数据元素时称为空队列。

队列也有两种:顺序队列和链队列,他们区别是,顺序队列是用数组来储存数据的,但是链队列是用单个变量和引用来保存数据的,但是他们的处理数据的逻辑都是一样的,入队(添加数据)操作限定在队尾(Rear),其他操作限定在队头(Front)

今天要说的是顺序队列的一种形式叫循环顺序队列

先画个图来说明顺序队列
在这里插入图片描述
队列添加元素的时候是从队尾添加,rear值指向的是队尾数据的索引,而队首的front值指向的是队首数据的索引-1,当队列为空时rear=front=-1,rear是随着数据的增加而增加,而front是随着数据减少而增加,因为队列出队操作被限定在了队首。当rear的等于数组的长度-1时,就会出现两种情况,一、数组已经满了,需要扩容,二、数组有过删除数据的操作,没有满,但是因为队列操作的逻辑,删除数据是从队首开始的。所以就会出现下图的情况

第一种情况,没有删除数据的操作,数组是满的,正常扩容

在这里插入图片描述

第二种情况,有过删除数据的操作,数组不是满的

这里你会发现,由于队首的数据被删除,所以数组并没有满,所以我们需要继续从0开始填充数据,正是由于这种情况,所以有了循环顺序队列,
在这里插入图片描述

循环顺序队列

循环顺序队列就是在程序逻辑上把数组的队首和队尾连在一起,这样最大化利用队列的空间,
在这里插入图片描述

介绍完毕,上代码

一、定义接口

/// <summary>
    /// 队列的接口  队列的实现有 顺序队列和链队列
    /// </summary>
    /// <typeparam name="T"></typeparam>
    interface IQueue<T>
    {
        int Count { get; }
        int GetLength();
        bool IsEmpty();
        void Clear();
        void Enqueue(T item);//入队
        T Dequeue();//出队,删除队首数据
        T Peek();//返回队首数据,不删除
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值