C#数据结构与算法之队列浅析

开发 后端 算法
C#数据结构与算法之队列是什么概念呢?C#数据结构与算法之队列是如何实现的呢?那么本文就向你介绍这方面的内容。

C#数据结构与算法之队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(back)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。这也就是我们平常经常用说到的先进先出法则(FIFO),队列这种法则,在中国好久以前就开始运用了,例如粮仓管理官员,在没掌握这种法则前,仓库底部的粮食都因时间太久而坏掉了,后来有聪明人士在粮仓二边开个门,一边进仓一边出仓,这样管理就方便多了。队列中没有元素时,称为空队列。

C#数据结构与算法之队列实现的接口如下:

  1. public interface IQueen﹤T﹥  
  2. {  
  3.     int Length();  
  4.     bool IsEmpty();  
  5.     bool IsFull();  
  6.     void Clear();  
  7.     void IN(T items);  
  8.     T Out();  
  9.     T GetFrontItem();  

C#数据结构与算法之队列实现的原理与代码如下:

  1. public class JQueen﹤T﹥ : IQueen﹤T﹥  
  2. {  
  3.     private int size;  
  4.     private T[] item;  
  5.     private int front;  
  6.     private int back;  
  7.  
  8.     public JQueen()  
  9.         : this(100)  
  10.     {  
  11.         size = 100;  
  12.         item = new T[100];  
  13.         front = back = -1;  
  14.     }  
  15.  
  16.     public JQueen(int length)  
  17.     {  
  18.         size = length;  
  19.         item = new T[length];  
  20.         front = back = -1;  
  21.     }  
  22.  
  23.     public T this[int index]  
  24.     {  
  25.         get { return item[index]; }  
  26.         set { item[index] = value; }  
  27.     }  
  28.  
  29.     public int Front  
  30.     {  
  31.         get { return front; }  
  32.         set { front = value; }              
  33.     }  
  34.  
  35.     public int Back  
  36.     {  
  37.         get { return back; }  
  38.         set { back = value; }  
  39.     }  
  40.  
  41.     public int MaxLength  
  42.     {  
  43.         get { return size; }  
  44.         set { size = value; }  
  45.     }          
  46.  
  47.     public int Length()  
  48.     {  
  49.         return (back - front + size) % size;  
  50.     }  
  51.  
  52.     public bool IsEmpty()  
  53.     {  
  54.         return (front == back);  
  55.     }  
  56.  
  57.     public bool IsFull()  
  58.     {  
  59.         return ((back + 1) % size == front);  
  60.     }  
  61.  
  62.     public void Clear()  
  63.     {  
  64.         front = back = -1;  
  65.     }  
  66.  
  67.     public void IN(T items)  
  68.     {  
  69.         if (IsFull())  
  70.         {  
  71.             throw new ArgumentOutOfRangeException("RangeException",
  72.  "Queen RangeException: queen is full");  
  73.         }  
  74.         item[++back] = items;  
  75.     }  
  76.  
  77.     public T Out()  
  78.     {  
  79.         T tmp = default(T);  
  80.         if (IsEmpty())  
  81.         {  
  82.             throw new ArgumentOutOfRangeException("RangeException"
  83. "Queen RangeException: queen is empty");  
  84.         }  
  85.         tmp = item[++front];  
  86.         return tmp;  
  87.     }  
  88.  
  89.     public T GetFrontItem()  
  90.     {  
  91.         if (IsEmpty())  
  92.         {  
  93.             throw new ArgumentOutOfRangeException("RangeException"
  94. "Queen RangeException: queen is empty");  
  95.         }  
  96.         return item[front + 1];  
  97.     }  
  98.  

C#数据结构与算法之队列的测试队列代码:

  1. public class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.         try 
  6.         {  
  7.             JQueen﹤string﹥ JQ = new JQueen﹤string﹥();  
  8.             Console.WriteLine(JQ.IsEmpty());  //是否为空  
  9.             Console.WriteLine(JQ.IsFull());   //是否满队  
  10.             Console.WriteLine(JQ.MaxLength);  //初始化时队列的长度  
  11.             Console.WriteLine(JQ.Length());     //队列元素长度  
  12.             Console.WriteLine(JQ.Front);      //队头位置  
  13.             Console.WriteLine(JQ.Back);       //队尾位置  
  14.             JQ.IN("A");  //插入元素  
  15.             JQ.IN("B");  
  16.             JQ.IN("C");  
  17.             JQ.IN("D");  
  18.             Console.WriteLine(JQ.GetFrontItem());   //队头元素  
  19.             Console.WriteLine("------元素出队后队头元素-------");  
  20.             JQ.Out();  //出A  
  21.             JQ.Out();   
  22.             Console.WriteLine(JQ.GetFrontItem());   //出队二个元素后队头元素  
  23.             Console.ReadLine();  
  24.         }  
  25.         catch (Exception ex)  
  26.         {  
  27.             Console.WriteLine(ex.Message);   //异常  
  28.             Console.ReadLine();  
  29.         }  
  30.     }  

C#数据结构与算法之队列程序运行结果如下:

C#数据结构与算法之队列程序运行结果

C#数据结构与算法之队列相关的内容就向你介绍到这里,希望通过C#数据结构与算法之队列的介绍使你对C#数据结构与算法有所了解。

【编辑推荐】

  1. C#二叉树遍历算法实现浅析
  2. C#算法之约瑟夫环算法浅析
  3. C#数据结构与算法之线性表浅析
  4. C#数据结构与算法之顺序表浅析
  5. C#数据结构与算法之构造线性表的类浅析
责任编辑:仲衡 来源: 博客园
相关推荐

2009-08-11 14:51:11

C#数据结构与算法

2009-08-11 14:30:32

C#数据结构与算法

2009-08-11 14:14:42

C#数据结构与算法

2009-08-11 14:36:17

C#数据结构与算法线性表

2009-08-03 17:38:12

排序算法C#数据结构

2021-03-09 06:30:32

JAVA数据结构算法

2021-07-16 07:57:34

Python数据结构

2009-08-12 18:35:17

C#数据结构

2009-08-11 09:19:52

C#选择排序C#算法

2021-06-11 06:10:09

Python数据结构算法

2020-12-31 05:31:01

数据结构算法

2020-12-17 10:12:33

数据结构算法队列

2011-04-11 11:23:17

队列数据结构

2011-04-11 12:48:36

队列数据结构C++

2020-10-30 09:56:59

Trie树之美

2022-09-21 07:57:33

二叉搜索树排序二叉树

2022-09-26 07:56:53

AVL算法二叉树

2020-10-21 14:57:04

数据结构算法图形

2023-03-08 08:03:09

数据结构算法归并排序

2020-10-12 11:48:31

算法与数据结构
点赞
收藏

51CTO技术栈公众号