请用C#编写一个类实现队列的功能,并编写一个测试类测试该队列的功能,一个队列有入排和出排动作
时间: 2024-10-14 11:13:05 浏览: 26
c#结课作业.doc
在C#中,我们可以创建一个基于`System.Collections.Generic.Queue<T>`的简单队列类,这个类已经实现了基本的队列操作。这里是一个简单的实现:
```csharp
using System;
using System.Collections.Generic;
// 队列基类
public class CustomQueue<T>
{
private Queue<T> queueImpl;
public CustomQueue()
{
queueImpl = new Queue<T>();
}
// 入队(Enqueue)
public void Enqueue(T item)
{
queueImpl.Enqueue(item);
}
// 出队(Dequeue)
public T Dequeue()
{
if (queueImpl.Count == 0)
throw new InvalidOperationException("Queue is empty");
return queueImpl.Dequeue();
}
// 查看队首元素但不移除(Peek)
public T Peek()
{
if (queueImpl.Count == 0)
throw new InvalidOperationException("Queue is empty");
return queueImpl.Peek();
}
// 判断队列是否为空
public bool IsEmpty()
{
return queueImpl.Count == 0;
}
}
```
接下来,我们创建一个测试类来验证这个队列功能:
```csharp
using Xunit;
public class CustomQueueTest
{
[Fact]
public void TestCustomQueue()
{
CustomQueue<int> queue = new CustomQueue<int>();
// 测试空队列
Assert.True(queue.IsEmpty());
Assert.Throws<InvalidOperationException>(() => queue.Dequeue());
// 入队
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
// 检查大小
Assert.Equal(3, queue.queueImpl.Count);
// 出队
int firstElement = queue.Dequeue();
Assert.Equal(1, firstElement);
Assert.Equal(2, queue.Peek()); // 应该返回下一个元素
// 再次出队
int secondElement = queue.Dequeue();
Assert.Equal(2, secondElement);
Assert.Equal(3, queue.IsNotEmpty() ? queue.Peek() : null); // 如果队列非空,返回最后一个元素
// 确认队列为空
Assert.True(queue.IsEmpty());
}
}
```
在这个例子中,`CustomQueue`类实现了基本的队列操作,而`CustomQueueTest`类通过JUnit风格的断言来进行了一系列的测试。
阅读全文