namespace DSList
{
public class CSeqQueue<T> : IQueue<T>
{
//Fields
private int maxsize;
private T[] data;
private int front;
private int rear;
private int count;
//Properties
public T this[int index]
{
get
{
return data[index];
}
set
{
data[index] = value;
}
}
public int Maxsize
{
get
{
return maxsize;
}
set
{
maxsize = value;
}
}
public int Front
{
get
{
return front;
}
set
{
front = value;
}
}
public int Rear
{
get
{
return rear;
}
set
{
rear = value;
}
}
public int Count
{
get
{
return count;
}
}
//Constructors
public CSeqQueue()
: this(100)
{ }
public CSeqQueue(int size)
{
maxsize = size;
data = new T[size];
front = 0;
rear = 0;
count = 0;
}
//Base methods
public int GetLength()
{
return count;
}
public void Clear()
{
front = 0;
rear = 0;
count = 0;
}
public bool IsEmpty()
{
return count == 0;
}
public bool IsFull()
{
return count == maxsize;
}
public void In(T item)
{
if (IsFull())
{
Console.WriteLine("CSeqQueue is full!");
return;
}
data[rear] = item;
count++;
rear = (rear + 1) % maxsize;
}
public T Out()
{
T tmp = default(T);
if (IsEmpty())
{
Console.WriteLine("CSeqQueue is empty!");
return tmp;
}
tmp = data[front];
data[front] = default(T);
count--;
front = (front + 1) % maxsize;
return tmp;
}
public T GetFront()
{
if (IsEmpty())
{
Console.WriteLine("CSeqQueue is empty!");
return default(T);
}
return data[front];
}
public void Output()
{
for (int i = 0; i < maxsize; i++)
{
Console.Write(data[i]+" ");
}
Console.WriteLine();
}
}
}