zoukankan      html  css  js  c++  java
  • 4,泛型环形队列

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 
     5 namespace 数据结构
     6 {
     7     public class CircleQueue<T>
     8     {
     9         //队列最大容量
    10         private int maxSize;
    11         //队列头
    12         private int front;
    13         //队列尾
    14         private int rear;
    15         //队列数组
    16         private T[] arrayQueue;
    17         //队列尾下一位置,如果和头部重合说明队列已满
    18         //所以队列尾部会空一个位置,这样判断队列是否为空好处理一些
    19         public bool IsFull { get => (rear + 1) % maxSize == front; }
    20         //头尾同时指向同一位置为空
    21         public bool IsEmpty { get => front == rear; }
    22         //队列剩余数据
    23         public int Size { get => (maxSize + rear - front) % maxSize; }
    24 
    25         public CircleQueue(int maxSize = 1)
    26         {
    27             //由于队列留空了一格,所以最大值要加一
    28             this.maxSize = maxSize + 1;
    29             arrayQueue = new T[this.maxSize];
    30             //指向队列头
    31             this.front = 0;
    32             //指向队列尾的下一个位置,也就三队列头部
    33             this.rear = 0;
    34         }
    35         //入队
    36         public bool AddQueue(T item)
    37         {
    38             if (IsFull)
    39             {
    40                 Console.WriteLine("队列已满...");
    41                 return false;
    42             }
    43             arrayQueue[rear] = item;
    44             //尾指向下一位置
    45             rear = (rear + 1) % this.maxSize;
    46             return true;
    47         }
    48         //出队
    49         public T GetQueue()
    50         {
    51             if (IsEmpty)
    52             {
    53                 throw new IndexOutOfRangeException("队列为空...");
    54 
    55             }
    56             //头指向下一位置
    57             var val = arrayQueue[front];
    58             front = (front + 1) % this.maxSize;
    59             return val;
    60         }
    61     }
    62     public class CircleQueueGenericDemo
    63     {
    64         static void Main(string[] args)
    65         {
    66             //初始化队列
    67             var queue = new CircleQueue<string>(9);
    68             Console.WriteLine($"泛型当前队列长度为{queue.Size}");
    69             Console.WriteLine("向长度为9的入队10个字符串
    ");
    70             for (int i = 1; i <= 10; i++)
    71             {
    72 
    73                 if (queue.IsFull)
    74                 {
    75                     Console.Write("队列已满“10string”入队失败,");
    76                     break;
    77                 }
    78                 if (queue.AddQueue($"string{i}"))
    79                 {
    80                     Console.Write($"string{i}	");
    81                 }
    82 
    83             }
    84             Console.WriteLine($"当前队列长度为{queue.Size}	");
    85 
    86 
    87             Console.WriteLine("出队5个字符串...
    ");
    88             for (int i = 1; i <= 5; i++)
    89             {
    90 
    91                 Console.Write($"{queue.GetQueue()}	");
    92 
    93             }
    94             Console.WriteLine($"当前队列长度为{queue.Size}
    ");
    95         }
    96     }
    97 }

  • 相关阅读:
    ubuntu c++ 关机 重启 挂起 API
    Java 并发 —— Java 标准库对并发的支持及 java.util.concurrent 包
    机器学习: Logistic Regression--python
    机器学习:朴素贝叶斯--python
    理解YOLOv2训练过程中输出参数含义
    darknet YOLO 编译使用GPU
    机器学习:决策树--python
    Xmodem通信协议实例
    MQTT协议笔记之连接和心跳
    Android实现推送方式解决方案
  • 原文地址:https://www.cnblogs.com/xiaojvhuang/p/12683475.html
Copyright © 2011-2022 走看看