using System;
namespace A
{
class MyQueue<T>
{
private int head;
private int tail;
private int curLength;
private int capacity;
private T[] queue;
public MyQueue(int cap)
{
head = 0;
tail = 0;
curLength = 0;
capacity = cap;
queue = new T[capacity];
}
public bool isEmpty() { return curLength == 0; }
public bool isFull() { return curLength == capacity; }
public bool EnQueue(T node)
{
if (!isFull())
{
queue[tail] = node;
tail = (++tail) % capacity;
curLength++;
return true;
}
return false;
}
public T DeQueue()
{
T result = default(T);
if (!isEmpty())
{
result = queue[head];
head = (++head) % capacity;
curLength--;
return result;
}
return result;
}
public int GetCapacity()
{
return capacity;
}
public void Transver()
{
for (int i = head; i < head+curLength; i++)
{
Console.WriteLine(queue[i%capacity]);
Console.WriteLine($"前面还有{i-head}个");
}
}
}
class Program
{
static void Main(string[] args)
{
MyQueue<int> queue = new MyQueue<int>(6);
Console.WriteLine(queue.DeQueue());
for (int i = 0; i < queue.GetCapacity(); i++)
{
queue.EnQueue(i * 10);
}
queue.Transver();
queue.DeQueue();
Console.WriteLine();
queue.Transver();
queue.DeQueue();
queue.EnQueue(30);
Console.WriteLine(queue.EnQueue(40));
Console.WriteLine(queue.EnQueue(40));
Console.WriteLine();
queue.Transver();
}
}
}