加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

算法系列15天速成 第九天 队列

发布时间:2020-03-14 19:10:13 所属栏目:安全 来源:站长网
导读:可能大家都知道,线性表的变种非常非常多,比如今天讲的“队列”,灰常有意思啊

#region 队列的基本操作
    /// <summary>
/// 队列的基本操作
/// </summary>
    public class SeqQueueClass
    {
        #region 队列的初始化操作
        /// <summary>
/// 队列的初始化操作
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
        public SeqQueue<T> SeqQueueInit<T>(SeqQueue<T> seqQueue)
        {
            seqQueue.size = seqQueue.head = seqQueue.tail = 0;

return seqQueue;
        }
        #endregion

#region 队列是否为空
        /// <summary>
/// 队列是否为空
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
/// <returns></returns>
        public bool SeqQueueIsEmpty<T>(SeqQueue<T> seqQueue)
        {
            //如果两指针重合,说明队列已经清空
            if (seqQueue.size == 0)
                return true;
            return false;
        }
        #endregion

#region 队列是否已满
        /// <summary>
/// 队列是否已满
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
/// <returns></returns>
        public bool SeqQueueIsFull<T>(SeqQueue<T> seqQueue)
        {
            //采用循环队列后,头指针
            if (seqQueue.size == seqQueue.MaxSize)
                return true;
            return false;
        }
        #endregion

#region 队列元素入队
        /// <summary>
/// 队列元素入队
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
/// <param></param>
/// <returns></returns>
        public SeqQueue<T> SeqQueueIn<T>(SeqQueue<T> seqQueue, T data)
        {
            //如果队列已满,则不能进行入队操作
            if (SeqQueueIsFull(seqQueue))
                throw new Exception("队列已满,还入啥队列啊!");

//采用循环队列,必须先赋值,在自增tail指针
            seqQueue.data[seqQueue.tail] = data;
            seqQueue.tail = (seqQueue.tail + 1) % seqQueue.MaxSize;

//队列实际元素增加
            seqQueue.size++;

return seqQueue;
        }
        #endregion

#region 队列元素出队
        /// <summary>
/// 队列元素出队
/// </summary>
/// <typeparam></typeparam>
/// <param></param>
/// <returns></returns>
        public T SeqQueueOut<T>(SeqQueue<T> seqQueue)
        {
            if (SeqQueueIsEmpty(seqQueue))
                throw new Exception("队列已空,大哥,不要在出队了!");

//循环队列出队,展现的是head的灵活性
            seqQueue.head = (seqQueue.head + 1) % seqQueue.MaxSize;

//队列实际元素递减
            seqQueue.size--;

return seqQueue.data[seqQueue.head];
        }
        #endregion

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读