• 环形队列的应用


    /// <summary>
        /// 环形队列
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class CircleQueue<T>
        {
            private T[] queue;
            private int length;
            private int capacity;
            /// <summary>
            /// 头部
            /// </summary>
            private int head = 0;
            /// <summary>
            /// 尾部
            /// </summary>
            private int tail = 0;
    
            public CircleQueue(int capacity)
            {
                this.capacity = capacity;
                this.length = 0;
                this.head = 0;
                this.tail = 0;
                this.queue = new T[capacity];
            }
            /// <summary>
            /// 清空
            /// </summary>
            public void Clear()
            {
                head = 0;
                tail = 0;
                length = 0;
                this.queue = new T[this.capacity];
            }
            /// <summary>
            /// 队列是否为空
            /// </summary>
            /// <returns></returns>
            public bool IsEmpty()
            {
                return length == 0;
            }
            /// <summary>
            /// 队列是否已满
            /// </summary>
            /// <returns></returns>
            public bool IsFull()
            {
                return length == capacity;
            }
            /// <summary>
            /// 队列长度
            /// </summary>
            /// <returns></returns>
            public int Length()
            {
                return length;
            }
            /// <summary>
            /// 获取队列
            /// </summary>
            /// <returns></returns>
            public T[] GetAllQueue()
            {
                return queue;
            }
            /// <summary>
            /// 插入队列
            /// </summary>
            /// <param name="node"></param>
            /// <returns></returns>
            public bool EnQueue(T node)
            {
                if (IsFull() == false)
                {
                    queue[tail] = node;
                    tail = (++tail) % capacity;
                    length++;
                    return true;
                }
                return false;
            }
            /// <summary>
            /// 获取队列第一个元素
            /// </summary>
            /// <returns></returns>
            public T DeQueue()
            {
                T node = default(T);
                if (IsEmpty() == false)
                {
                    node = queue[head];
                    head = (++head) % capacity;
                    length--;
                }
                return node;
            }
            /// <summary>
            /// 显示剩余数据
            /// </summary>
            public void ShowItems()
            {
                for (int i = head; i < length + head; i++)
                {
                    Console.WriteLine(queue[i % capacity]);
                }
            }
        }//end

    环形队列主要应用在单线程读或者写,无需要锁,相比较Queue队列,Queue队列可能会出现单个元素的时候又读又写造成死锁。

    欢迎指正:haizi2014@qq.com
  • 相关阅读:
    基于麦克风阵列的声源定位算法之GCC-PHAT
    Parametric and Non-parametric Algorithms
    MATLAB中运算符优先级
    [HAOI2018]染色
    [SHOI2016]黑暗前的幻想乡
    [SCOI2012]滑雪
    [PA2014]Kuglarz
    Stroll
    [SDOI2010]大陆争霸
    解决IDEA Gradle构建报错"Cause: zip END header not found"
  • 原文地址:https://www.cnblogs.com/hcfan/p/7894891.html
Copyright © 2020-2023  润新知