用C# 写一个循环存储的数据结构
时间: 2023-10-22 18:06:38 浏览: 132
下面是一个用 C# 编写的循环存储的数据结构的示例:
```csharp
public class CircularBuffer<T>
{
private T[] buffer;
private int head;
private int tail;
private int count;
public CircularBuffer(int capacity)
{
buffer = new T[capacity];
head = 0;
tail = 0;
count = 0;
}
public void Enqueue(T item)
{
if (count == buffer.Length)
{
throw new InvalidOperationException("Buffer is full");
}
buffer[tail] = item;
tail = (tail + 1) % buffer.Length;
count++;
}
public T Dequeue()
{
if (count == 0)
{
throw new InvalidOperationException("Buffer is empty");
}
T item = buffer[head];
head = (head + 1) % buffer.Length;
count--;
return item;
}
public bool IsEmpty()
{
return count == 0;
}
public bool IsFull()
{
return count == buffer.Length;
}
}
```
上面的代码定义了一个泛型类 `CircularBuffer<T>`,它使用一个数组来实现循环存储的功能。数据结构的容量由构造函数中的参数 `capacity` 指定。
该循环缓冲区提供了 `Enqueue()` 方法来向缓冲区中添加元素,`Dequeue()` 方法来从缓冲区中取出元素。`IsEmpty()` 方法用于检查缓冲区是否为空,`IsFull()` 方法用于检查缓冲区是否已满。
使用示例:
```csharp
CircularBuffer<int> buffer = new CircularBuffer<int>(5);
buffer.Enqueue(1);
buffer.Enqueue(2);
buffer.Enqueue(3);
Console.WriteLine(buffer.Dequeue()); // 输出:1
Console.WriteLine(buffer.Dequeue()); // 输出:2
buffer.Enqueue(4);
buffer.Enqueue(5);
buffer.Enqueue(6); // 缓冲区已满,将抛出异常
Console.WriteLine(buffer.Dequeue()); // 输出:3
```
希望这个示例能帮助你理解如何使用 C# 实现循环存储的数据结构。如有任何疑问,请随时提问。
阅读全文