链队列
链队列通常用单链表示,它的实现是单链表的简化,为了操作方便,把
队头设置在链表的头部
,并且
不需要头结点。
创建节点类
public class Node<T>
{
private T data;存储数据
private Node<T>next;创建下一节点的引用
创建构造方法
public Node(T item)
{
data = item;
}
给字段创建属性
public T Data
{
set{data = value;}
get{return data;}
}
public Node<T> Next
{
set{next = value;}
get{return next;}
}
}
实现链队列
public LinkQueue<T>:IQueue<T>
{
需要保留头结点、尾结点、元素的个数
private Node<T> front;头结点
private Node<T> rear;尾结点
private int count;元素的个数
创建构造函数
public LinkQueue()
{
front = null;
rear = null;
count = 0;
}
获取元素个数的操作
public int GetLength()
{
return count;
}
public int Count
{
get{return count;}
}
判断链表是否为空
public bool IsEmpty()
{
return count==0;
}
清空操作
public void Clear()
{
front =null;
rear = null;
count = 0;
}
入队操作
把数据放在队尾,要判断当前是否有元素
public void Enqueque(T item)
{
Node <T>newNode = new Node<T>(item);创建新的节点
if(count==0){
如果链队为空,新的节点就是头节点和为节点
front = rear = newNode;
count=1;
} else{
链队有数据
rear.Next = newNode; 原本的尾结点连接一个新节点
rear = newNode;把新节点设为尾节点
count++
;
}
出队操作
public T Dequeque()
{队列为空的时候无法出队
if(count==0)
{
retrun default(T);
}
else if(count==1)
{
T temp = front.Data;
front = rear = null;
count =0;
return temp;
}else {
T temp = front.Next;
front = front.Next;
return temp;
}
}
取得队首的值
public T Peek()
{
if(front!=null)
{
return front.Data;
}else
{
return default(T);
}
}
}