接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 队列
{
interface IQueue<T>
{
int Count { get; }
int GetLength();
bool IsEmpty();
void Clear();
void EnQueue(T item);
T DeQueue();
T Peek();
}
}
顺序队列
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 队列
{
class SeqQueue<T> : IQueue<T>
{
private T[] date;
private int count;//队列中元素个数
private int rear;//等于队列中头元素索引-1
private int front;//等于队列中尾元素索引
public SeqQueue(int size)
{
this.date = new T[size];
count = 0;
rear = -1;
front = -1;
}
public SeqQueue():this(10)
{
}
public int Count
{
get { return count; }
}
public void Clear()
{
count = 0;
front = rear = -1;
}
public T DeQueue()
{
if(count<=0)
{
Console.WriteLine("队列为空");
return default(T);
}
else
{
T temp;
temp = date[front + 1];
front++;
return temp;
}
}
public void EnQueue(T item)
{
if(count==date.Length)
{
Console.WriteLine("队列已满");
}
else
{
if(rear==date.Length-1)
{
date[0] = item;
rear = 0;
count++;
}
else
{
date[rear + 1] = item;
rear++;
count++;
}
}
}
public int GetLength()
{
return count;
}
public bool IsEmpty()
{
return count==0;
}
public T Peek()
{
T temp;
temp = date[front + 1];
return temp;
}
}
}
链式队列
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 队列
{
class LinkQueue<T> : IQueue<T>
{
private Node<T> rear;
private Node<T> front;
private int count;
public LinkQueue()
{
rear = null;
front = null;
count = 0;
}
public int Count
{
get
{
return count;
}
}
public void Clear()
{
rear = null;
front = null;
count = 0;
}
public T DeQueue()
{
if(count==0)
{
Console.WriteLine("队列为空");
return default(T);
}
else if(count==1)
{
T temp = front.Date;
count--;
rear = null;
front = null;
return temp;
}
else
{
T temp = front.Date;
front = front.Next;
count--;
return temp;
}
}
public void EnQueue(T item)
{
Node<T> newNode = new Node<T>(item);
if(count == 0)
{
front = newNode;
rear = newNode;
count++;
}
else if(count ==1)
{
front.Next = newNode;
rear = newNode;
count++;
}
else
{
rear.Next = newNode;
rear = newNode;
count++;
}
}
public int GetLength()
{
return count;
}
public bool IsEmpty()
{
return count == 0;
}
public T Peek()
{
if(count==0)
{
Console.WriteLine("队列为空");
return default(T);
}
else
{
return front.Date;
}
}
}
}
节点
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 队列
{
class Node<T>
{
private T date;
private Node<T> next;
public Node(T item)
{
this.date = item;
}
public T Date
{
get { return date; }
set { date = value; }
}
public Node<T> Next
{
get { return next; }
set
{
next = value;
}
}
}
}