namespace DateStructrue
{
public interface IQueue<T> : IDateStructrue
{
void EnQueue(T item);
T DeQueue();
T GetFront();
//T this[int index] { get; set; }
bool IsFull { get; }
}
}
namespace DateStructrue
{
public class Queue<T>:IQueue<T>
{
private T[] _item;
private int _head;
private int _tail;
public Queue() : this(10) { }
public Queue(int size)
{
_item = new T[size];
}
#region IQueue<T> Members
public void EnQueue(T item)
{
if (IsFull)
{
T[] destinationArray = new T[this._item.Length + 10];
if (this._head < this._tail)
{ Array.Copy(this._item, this._head, destinationArray, 0, this.Count); }
else
{ Array.Copy(this._item, 0, destinationArray, 0, this._item.Length); }
this._item = destinationArray;
}
this._item[_tail++] = item;
}
public T DeQueue()
{
T temp = default(T);
if (IsEmpty){ return temp; }
return temp = this._item[_head++];
}
public T GetFront()
{
T temp = default(T);
if (IsEmpty) { return temp; }
return temp = this._item[_head];
}
public bool IsFull
{
get { return this._tail % this._item.Length == 0; }
}
#endregion
#region IDateStructrue Members
public int Count
{
get { return this._tail - this._head; }
}
public void Clear()
{
this._head = this._tail = 0;
}
public bool IsEmpty
{
get { return this._head == this._tail; }
}
#endregion
}
}