先进先出,后进后出
For Example:
void Start ()
{
Queue<int> queue=new Queue<int>();
//入队(添加数据)
queue.Enqueue(10); //对首
queue.Enqueue(20);
queue.Enqueue(30);
queue.Enqueue(40); //队尾
Debug.Log("队列中的数据个数为:"+queue.Count);
//出队(取得对首数据,并删除)
int temp=queue.Dequeue();
Debug.Log(temp);
Debug.Log("Dequeue之后数据的个数为:"+queue.Count);
int temp2 = queue.Peek();
Debug.Log(temp2);
Debug.Log("Peek之后队列中的数据个数为:"+queue.Count);
queue.Clear();
Debug.Log("Clear之后数据的个数为:"+queue.Count);
}
自己写的顺序队列(SeqQueue)
定义接口的方法:
public interface IQueue<T>
{
int Count { get; }
int GetLength();
bool IsEmpty();
void Clear();
void Enqueue(T item);
T Dequeue();
T Peek();
}
public class SeqQueue<T>:IQueue<T>
{
private T[] data;
private int count;
private int front; //对首(对首的索引-1)
private int rear; //队尾(队尾的索引)
public SeqQueue():this(10)
{
}
public SeqQueue(int size)
{
data = new T[size];
count = 0;
front = -1;
rear = -1;
}
public int Count {
get { return count; }
}
public int GetLength()
{
return count;
}
public void Clear()
{
count = 0;
front = rear = -1;
}
public bool IsEmpty()
{
return count==0;
}
public void Enqueue(T item)
{
if (count == data.Length)
{
Debug.Log("数列已存满,不能再存储了");
}
else
{
if (rear == data.Length - 1)
{
data[0] = item;
rear = 0;
count++;
}
else
{
data[rear + 1] = item;
rear++;
count++;
}
}
}
public T Dequeue()
{
if (count > 0)
{
T temp = data[front + 1];
front++;
count--;
return temp;
}
else
{
Debug.Log("该队列里没有数据,不能出对");
return default(T);
}
}
public T Peek()
{
return data[front+1];
}
}
链队列:
public class Node<T>
{
private T data;
private Node<T> next;
public Node(T item)
{
data = item;
}
public T Data
{
get { return this.data; }
set { this.data = value; }
}
public Node<T> Next
{
get { return this.next; }
set { this.next = value; }
}
}
//链队列的创建
public class 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 Count { get{return count;}}
public int GetLength()
{
return count;
}
public void Clear()
{
front=null;
rear = null;
count = 0;
}
public bool IsEmpty()
{
return count == 0;
}
public void Enqueue(T item)
{
Node<T> newNode=new Node<T>(item);
if (count == 0)
{
front = newNode;
rear = newNode;
count = 1;
}
else
{
rear.Next = newNode;
rear = newNode;
count++;
}
}
public T Dequeue()
{
if (count == 0)
{
Debug.Log("队列里面没有数据,不能进行操作");
return default(T);
}
else if (count == 1)
{
T temp = front.Data;
front = rear = null;
count = 0;
return temp;
}
else
{
T temp = front.Data;
front = front.Next;
count--;
return temp;
}
}
public T Peek()
{
if (front != null)
{
return front.Data;
}
else
{
return default(T);
}
}
}