interface IQueue<T>
{
int GetLength();
void Clear();
void EnQueue(T elem);
void Dequeue();
T Peek();
bool IsEmepty();
/// <summary>
/// 链队列
/// </summary>
/// <typeparam name="T"></typeparam>
class LinkQueue<T> : IQueue<T>
{
private int count; //元素个数
private Node<T> front;//头指针
private Node<T> rear;//尾指针
public LinkQueue()
{
count = 0;
front = rear = new Node<T>(); //初始化指向头结点
}
public void Clear()
{
count = 0;
front.Next = null;
rear = null;
}
//对头出队
public T Dequeue()
{
//判断是否为空队
//对头指针改变
//count--
if (rear==front)
{
throw new Exception("空队无法删除");
}
Node<T> p = front.Next;
front.Next = p.Next;
count--;
return p.Data;
}
//队尾入队
public void EnQueue(T elem)
{
Node<T> newNode=new Node<T>(elem);
//把新的节点添加到队尾
//改变尾指针的指向地址
//count++
rear.Next = newNode;
rear = newNode;
count++;
}
public int GetLength()
{
return count;
}
public bool IsEmepty()
{
return front == rear;
}
public T Peek()
{
Node<T> p = front.Next;
return p.Data;
}
void IQueue<T>.Dequeue()
{
}
}
class Program
{
static void Main(string[] args)
{
//Queue<int> sum=new Queue<int>(6);
LinkQueue<int> sum=new LinkQueue<int>();
Console.WriteLine(sum.IsEmepty());
Console.WriteLine(sum.GetLength());
sum.EnQueue(100);
sum.EnQueue(200);
sum.EnQueue(300);
sum.EnQueue(400);
Console.WriteLine(sum.Dequeue());
Console.WriteLine(sum.Peek());
Console.WriteLine(sum.IsEmepty());
sum.Clear();
Console.WriteLine(sum.GetLength());
Console.ReadKey();
}
}