队列c#版
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了队列c#版,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1910字,纯文字阅读大概需要3分钟。
内容图文
一. 顺序队列
在顺序队列中,我们维护一个头指针和尾指针来避免每一次出队都要移动数组,而仅仅在入队时发现空间不足时,在尝试进行移动数组操作,将空余的位置利用起来。
public class MyQueue<T> { T[] data; // 数据int front = 0; // 前指针int rear = 0; // 后指针public MyQueue(int size) { data = new T[size]; } ///<summary>/// 入队 ///</summary>///<param name="model"></param>publicvoid Enqueue(T model) { if (rear < data.Length) data[rear] = model; else { if (front > 0) { Move(); data[rear] = model; } elsethrownew ArgumentOutOfRangeException("超出队列长度"); } rear++; } ///<summary>/// 出队 ///</summary>///<returns></returns>public T Dequeue() { T result = default(T); if (rear > front) result = data[front]; elsethrownew NullReferenceException("队列中没有值"); front++; return result; } publicbool IsEmpty() { return front == rear; } publicbool IsFull() { return rear == data.Length; } publicint Length => data.Length; publicint ItemLength => rear - front; privatevoid Move() { var itemlength = ItemLength; // 移动队列,将下标为0的前数组填满for (int i = 0; i < itemlength; i++) { data[i] = data[front]; front++; } front = 0; rear = itemlength; }
测试代码:
1 try 2 { 3 MyQueue<int> queue = new MyQueue<int>(3); 4 queue.Enqueue(1); 5 queue.Enqueue(2); 6 queue.Enqueue(3); 7for (int i = 0; i < queue.Length; i++) 8 { 9 Console.WriteLine(queue.Dequeue()); 10 } 11 queue.Enqueue(4); 12 queue.Enqueue(5); 13 queue.Enqueue(6); 14 Console.WriteLine(queue.Dequeue()); 15 queue.Enqueue(7); 16 Console.WriteLine(queue.Dequeue()); 17 Console.WriteLine(queue.Dequeue()); 18 queue.Enqueue(8); 19 queue.Enqueue(9); 20 queue.Enqueue(10); 21 queue.Enqueue(11); 22} 23catch (ArgumentOutOfRangeException e) 24{ 25 Console.WriteLine(nameof(ArgumentOutOfRangeException) + e.Message); 26} 27catch (NullReferenceException e) 28{ 29 Console.WriteLine(nameof(NullReferenceException) + e.Message); 30 }
原文:https://www.cnblogs.com/LTEF/p/12468145.html
内容总结
以上是互联网集市为您收集整理的队列c#版全部内容,希望文章能够帮你解决队列c#版所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。