朝阳网站推广,拱墅区建设局网站,Wordpress 用户 AUTO_INCREMENT,怎样用文本建一个网站目录
一、涉及到的知识点
1.C#中的队列类
2.自定义队列的方法
#xff08;1#xff09;先设计一个CListT类
#xff08;2#xff09;再设计CQueueT类
二、自定义队列CQueueT类的实例 一、涉及到的知识点
1.C#中的队列类 在C#中实现队列类1先设计一个CListT类
2再设计CQueueT类
二、自定义队列CQueueT类的实例 一、涉及到的知识点
1.C#中的队列类 在C#中实现队列类其实队列也是链表的扩展它是一种特殊的链表如堆栈一样。它与堆栈的不同在于堆栈采用的是先进后出原则而队列采用的是先进先出原则。 和栈相反队列是先进先出的线性表只允许在表的一端进行插入而在另一端删除元素。在队列中允许插入的一端叫做队尾允许删除的一端称为队头。 在队列的实现过程中主要有两个操作即入队和出队具体如下
入队就是在队列的尾部添加数据队列数据个数加1尾指针后移。出队就是在队列的头部取数据然后删除该数据头指针后移。
2.自定义队列的方法
1先设计一个CListT类 在这个CListT类的实现使用了一个私有内部类Node来表示链表中的节点。每个Node实例包含一个值Value和一个指向下一个节点的引用Next。 CListT类提供了以下方法
AddLast(T item)将一个元素添加到链表的末尾。RemoveFirst()从链表的头部移除一个节点。如果链表为空将抛出InvalidOperationException异常。Count获取链表中的元素数量。Clear()清空链表。
2再设计CQueueT类 在这个C#队列类CQueueT的实现使用了链表类CList作为底层数据结构。 这个CQueueT类提供了以下方法
EnQueue(T item)将一个元素添加到队列的末尾。DeQueue()从队列的头部移除一个元素并返回它。如果队列为空将抛出InvalidOperationException异常。Clear()清空队列。QueueCount()返回队列中的元素数量。
二、自定义队列CQueueT类的实例 这个实例是通用的因为程序中使用的链表、队列都使用的泛型方法适合用于任何数据类型。本实例仅起到抛砖引玉的作用有需要的网友可以在链表类中丰富类中的方法对应地在队列中实现该方法。于是以不变应万变无往而不利。
// 自定义队列类其中引用自定义的链表类的方法
namespace _134_2
{/// summary/// 自定义链表类/// /summary/// typeparam nameT泛型运算符/typeparampublic class CListT{private class Node(T value){public T Value value;public Node? Next;}private Node? _head;private int _count;public CList(){_head null;_count 0;}public void AddLast(T item){var newNode new Node(item);if (_head null){_head newNode;}else{var current _head;while (current.Next ! null){current current.Next;}current.Next newNode;}_count;}public void RemoveFirst(){if (_head null){throw new InvalidOperationException(链表为空无法移除元素。);}var removedNode _head;_head removedNode.Next;_count--;}public int Count{get { return _count; }}public void Clear(){_head null;_count 0;}public T FirstOrDefault(){if (Count 0){throw new InvalidOperationException(列表为空无法获取第一个元素。);}return Peek();}public T Peek(){if (_count 0){throw new InvalidOperationException(The list is empty, cannot get the first element.);}return _head!.Value;}}/// summary/// 自定义队列类/// 引用链表类CListT的方法/// /summary/// typeparam nameT泛型运算符/typeparampublic class CQueueT{private readonly CListT _queue;public CQueue(){_queue new CListT();}public void EnQueue(T item){_queue.AddLast(item);}public T DeQueue(){if (_queue.Count 0){throw new InvalidOperationException(队列为空无法出队。);}T item _queue.FirstOrDefault();_queue.RemoveFirst();return item;}public void Clear(){_queue.Clear();}public int QueueCount{get{return _queue.Count;}}}class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);CQueueint queue new();// 向队列中添加元素queue.EnQueue(1);queue.EnQueue(2);queue.EnQueue(3);// 查看队列中的元素数量Console.WriteLine(队列中的元素数量: queue.QueueCount);// 弹出第一个元素int dequeuedItem1 queue.DeQueue();Console.WriteLine(弹出的第一个元素: dequeuedItem1);// 再次查看队列中的元素数量Console.WriteLine($队列中的元素数量: {queue.QueueCount});// 弹出剩余的元素int dequeuedItem2 queue.DeQueue();Console.WriteLine(弹出的第二个元素: dequeuedItem2);int dequeuedItem3 queue.DeQueue();Console.WriteLine(弹出的第三个元素: dequeuedItem3);// 清空队列queue.Clear();// 查看队列是否为空Console.WriteLine($队列是否为空: {queue.QueueCount});}}
}
//运行结果
/*
队列中的元素数量: 3
弹出的第一个元素: 1
队列中的元素数量: 2
弹出的第二个元素: 2
弹出的第三个元素: 3
队列是否为空: 0*/